씨름 선수
2021. 10. 8. 10:34
⏰ 코딩테스트/그리디
씨름 선수(그리디) 현수는 씨름 감독입니다. 현수는 씨름 선수를 선발공고를 냈고, N명의 지원자가 지원을 했습니다. 현수는 각 지원자의 키와 몸무게 정보를 알고 있습니다. 현수는 씨름 선수 선발 원칙을 다음과 같이 정했습니다. “다른 모든 지원자와 일대일 비교하여 키와 몸무게 중 적어도 하나는 크거나, 무거운 지원자만 뽑기로 했습니다.” 만약 A라는 지원자보다 키도 크고 몸무게도 무거운 지원자가 존재한다면 A지원자는 탈락입니다. ▣ 입력설명 첫째 줄에 지원자의 수 N(5

백준 알고리즘 - 1931 - 회의실 배정
2021. 10. 7. 10:19
⏰ 코딩테스트/그리디
풀이 그리디 : 문제 푸는 단계에서 가장 좋은 것을 선택하는 것 보통의 그리디는 대부분 정렬과 동반되어 나온다. 회의가 끝나는 시각을 기준으로 정렬을 해야 최대한 회의를 많이 할 수 있다. 빨리 끝나는 것이 중요하기 때문이다. 2 3 1 4 3 5 → 회의 진행 가능 4 6 5 7 → 회의 진행 가능 그리고 회의의 끝나는 시간과 다음 회의의 시작 시간을 비교해 보는 것이다. 코드 1 n = int(input()) meeting = [] for i in range(n): first, second = map(int,input().split()) meeting.append((first, second)) # 튜플 형태로 저장 meeting.sort(key = lambda x: (x[1], x[0])) # x[1..
마구간 정하기(결정알고리즘)
2021. 10. 6. 21:27
⏰ 코딩테스트/그리디
마구간 정하기(결정알고리즘) N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3, ......, xN의 좌표를 가지며, 마구간 간에 좌표가 중복되는 일은 없습니다. 현수는 C마리의 말을 가지고 있는데, 이 말들은 서로 가까이 있는 것을 좋아하지 않습니다. 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 두 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶습니다. C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대값을 출력하는 프로그램을 작성하세요. ▣ 입력 설명 첫 줄에 자연수 N(3

REST API
2021. 10. 6. 10:17
🚦 Server/AWS
REST API REST API는 HTTP를 이용해서 기계들이 통신을 할 때 HTTP가 가지고 있는 기능을 최대한 활용해서 명확하면서 단순하게 통신할 수 없을까?하는 고민에서 출발한 모범사례라고 할 수 있다. 블로그나 SNS의 하나하나의 글을 토픽이라고 한다면, 이러한 데이터들을 REST API에서는 리소스라고 한다. 리소스는 uri를 통해 표현되고 식별된다. 이때 토픽 전체를 식별하고 싶다면, 또는 여러개의 토픽을 식별하고 싶다면 Collection을 사용하면 된다. 복수형을 사용한다. 이렇게 한건한건 모여있는 것은 Element라고 한다. 즉 Element가 모여있는 것은 Collection이라고 한다. uri는 단지 그 정보를 식별하는 이름일 뿐이고, 이 정보를 가공할 수 있어야 한다. 정보를 가공..

Contents Based Filtering (Movie Dataset)
2021. 10. 5. 17:25
💡 AI/RecSys
Contents-Based Filtering 기법 영화 구성 콘텐츠 텍스트 ↓ 피처 벡터화 (Count, TF-IDF) ↓ 코사인 유사도 ↓ 유사도 및 평점에 따른 영화 추천 Contents-Based Filtering 구현 프로세스 콘텐츠에 대한 여러 텍스트 정보들을 피처 벡터화 코사인 유사도로 콘텐츠별 유사도 계산 콘텐츠 별로 가중 평점을 계산 유사도가 높은 콘텐츠 중에 평점이 좋은 콘텐츠 순으로 추천 캐글 Movie dataset : https://www.kaggle.com/tmdb/tmdb-movie-metadata TMDB 5000 Movie Dataset Metadata on ~5,000 movies from TMDb www.kaggle.com 파일 읽어오기 import pandas as pd..
뮤직비디오(결정알고리즘)
2021. 10. 5. 12:11
⏰ 코딩테스트/그리디
뮤직비디오(결정알고리즘) 지니레코드에서는 불세출의 가수 조영필의 라이브 동영상을 DVD로 만들어 판매하려 한다. DVD에는 총 N개의 곡이 들어가는데, DVD에 녹화할 때에는 라이브에서의 순서가 그대로 유지되어야 한다. 순서가 바뀌는 것을 우리의 가수 조영필씨가 매우 싫어한다. 즉, 1번 노래와 5번 노래를 같은 DVD에 녹화하기 위해서는 1번과 5번 사이의 모든 노래도 같은 DVD에 녹화해야 한다. 또한 한 노래를 쪼개서 두 개의 DVD에 녹화하면 안된다. 지니레코드 입장에서는 이 DVD가 팔릴 것인지 확신할 수 없기 때문에 이 사업에 낭비되는 DVD를 가급적 줄이려고 한다. 고민 끝에 지니레코드는 M개의 DVD에 모든 동영상을 녹화하기로 하였다. 이 때 DVD의 크기(녹화 가능한 길이)를 최소로 하려..

백준 알고리즘 - 1654 - 랜선 자르기
2021. 10. 5. 10:59
⏰ 코딩테스트/그리디
틀린 코드 k, n = map(int,input().split()) a = [] for _ in range(k): a.append(int(input())) num = sum(a)//n while True: ans=0 for i in range(k): ans += a[i]//num if ans==n: print(num) break num -= 1 답은 맞았지만 시간초과. 코드 k, n = map(int,input().split()) def Count(len): # 길이를 변수로 받아서 cnt = 0 for i in line: cnt+=(i//len) return cnt line = [] ans = 0 largest = 0 # 랜선 중 가장 긴 값 for i in range(k): tmp = int(inpu..
이분 검색
2021. 10. 3. 12:06
⏰ 코딩테스트/그리디
이분 검색 임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. 단 중복값은 존재하지 않습니다. ▣ 입력설명 첫 줄에 한 줄에 자연수 N(3

격자판 회문수
2021. 10. 3. 11:26
⏰ 코딩테스트/리스트 탐색
격자판 회문수 1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다. 빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다. ▣ 입력설명 1부터 9까지의 자연수로 채워진 7*7 격자판이 주어집니다. ▣ 출력설명 5자리 회문수의 개수를 출력합니다. ▣ 입력예제 1 2 4 1 5 3 2 6 3 5 1 8 7 1 7 8 3 2 7 1 3 8 6 1 2 3 2 1 1 1 3 1 3 5 3 2 1 1 2 5 6 5 2 1 2 2 2 2 1 5 ▣ 출력예제 1 3 코드1 arr = [list(map(int, inpu..

스도쿠 검사
2021. 10. 3. 10:38
⏰ 코딩테스트/리스트 탐색
스도쿠 검사 스도쿠는 매우 간단한 숫자 퍼즐이다. 9×9 크기의 보드가 있을 때, 각 행과 각 열, 그리고 9개의 3×3 크기의 보드에 1부터 9까지의 숫자가 중복 없이 나타나도록 보드를 채우면 된다. 예를 들어 다음을 보자. 위 그림은 스도쿠를 정확하게 푼 경우이다. 각 행에 1부터 9까지의 숫자가 중복 없이 나오고, 각 열에 1부터 9까지의 숫자가 중복 없이 나오고, 각 3×3짜리 사각형(9개이며, 위에서 색깔로 표시되었다)에 1부터 9까지의 숫자가 중복 없이 나오기 때문이다. 완성된 9×9 크기의 스도쿠가 주어지면 정확하게 풀었으면 “YES", 잘 못 풀었으면 ”NO"를 출력하는 프로그램을 작성하세요. ▣ 입력설명 첫 번째 줄에 완성된 9×9 스도쿠가 주어집니다. ▣ 출력설명 첫째 줄에 “YES" ..

봉우리
2021. 9. 30. 16:41
⏰ 코딩테스트/리스트 탐색
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여 있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다. ▣ 입력설명 첫 줄에 자연수 N이 주어진다.(1 arr[i+1][j] and arr[i][j] > arr[i][j-1] and arr[i][j] > arr[i][j+1]: num += 1 print(num) """ 5 5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2 """ all() 함수 이용하기 : 모두가 ..

SKT AI - 추천시스템
2021. 9. 29. 16:03
💡 AI/RecSys
추천시스템 지속적인 피드백을 통한 선순환 추천과 검색은 다르다. 시나리오 시작이 다르다. 사용자는 자신이 찾고자하는 객체에 대해서 쿼리를 날린다. 사용자의 명시적인 요청자체가 필요가 없다. 아무런 요청을 날리지 않아도 내 의사와 상관없이 제공된다. 객체 자체를 특정하지 않은 요청이 있다. 대상에 대해서 지정을 하고 있지 않기 때문이다. 다만 선호의 개념은 있다. 얼마나 좋아하고 싫어하는지에 대한 개념은 있다. 추천 시스템은 사람들의 요청에 대한 의도가 검색 시스템과 정반대이다. 시나리오의 방향성 자체가 다르고 들어오는 쿼리자체가 다르기 때문에 해결하는 방법 자체가 다르다. 추천 시스템이란 사용자들이 좋아할만한 것들을 발견할 수 있도록 도와주는 시스템이다. 정보 검색과의 차이를 명확하게 알아야 한다. 사용..

곳감(모래시계)
2021. 9. 29. 10:15
⏰ 코딩테스트/리스트 탐색
곳감(모래시계) 현수는 곳감을 만들기 위해 감을 깍아 마당에 말리고 있습니다. 현수의 마당은 N*N 격자판으로 이루어져 있으며, 현수는 각 격자단위로 말리는 감의 수를 정합니다. 그런데 해의 위치에 따라 특정위치의 감은 잘 마르지 않습니다. 그래서 현수는 격자의 행을 기준으로 왼쪽, 또는 오른쪽으로 회전시켜 위치를 변경해 모든 감이 잘 마르게 합니다. 만약 회전명령 정보가 2 0 3이면 2번째 행을 왼쪽으로 3만큼 아래 그림처럼 회전시키는 명령입니다. 첫 번째 수는 행번호, 두 번째 수는 방향인데 0이면 왼쪽, 1이면 오른쪽이고, 세 번째 수는 회전하는 격자의 수입니다. M개의 회전명령을 실행하고 난 후 아래와 같이 마당의 모래시계 모양의 영역에는 감 이 총 몇 개가 있는지 출력하는 프로그램을 작성하세요..

사과나무(다이아몬드)
2021. 9. 28. 17:02
⏰ 코딩테스트/리스트 탐색
사과나무(다이아몬드) 현수의 농장은 N*N 격자판으로 이루어져 있으며, 각 격자안에는 한 그루의 사과나무가 심어저 있다. N의 크기는 항상 홀수이다. 가을이 되어 사과를 수확해야 하는데 현수는 격자판 안의 사과를 수확할 때 다이아몬드 모양의 격자판만 수확하고 나머지 격자안의 사과는 새들을 위해서 남겨놓는다. 만약 N이 5이면 아래 그림과 같이 진한 부분의 사과를 수확한다. 현수과 수확하는 사과의 총 개수를 출력하세요. ▣ 입력설명 첫 줄에 자연수 N(홀수)이 주어진다.(3
개발자 좋은 글 정리
2021. 9. 27. 16:29
📌 WorkOut
백엔드 개발자를 꿈꾸는 학생개발자에게 https://d2.naver.com/news/3435170 서비스 기획자의 시스템 설계 https://brunch.co.kr/@yunheh/23 서비스 기획자의 시스템 설계 시스템은 비즈니스에 어떤 영향을 미치는가? | 서비스 기획자는 비즈니스를 프로덕트에 녹여낼 수 있어야 한다. 즉 비즈니스 전략을 현실화 시키는 것. 기술 구현을 가능하게 만드는 사람이다. brunch.co.kr 훌륭한 프로그래머 되는 법 https://brunch.co.kr/@neverlish/21 요약 01 코드에 신경 쓰기 - 프로그래머는 올바르게 작동하는 훌륭한 코드를 짜도록 노력해야 한다. - 의도가 드러나는 코드 : 다른 프로그래머들이 쉽게 파악하고 이해 가능한 코드 - 유지 보수 가능..

격자판 최대합
2021. 9. 27. 10:59
⏰ 코딩테스트/리스트 탐색
코드 이중리스트로 입력받기 = 똑같이 리스트로 입력 받고 반복해준 후 리스트 안에 넣기 n = int(input()) a = [] for i in range(n): a[i] = list(map(int, input().split())) # a = [list(map(int, input().split())) for _ in range(n)] res = 0 for i in range(n): sum1 = sum2 = 0 for j in range(n): sum1 += a[i][j] sum2 += a[j][i] if sum1 > res: res = sum1 if sum2 > res: res = sum2 for i in range(n): sum1 += a[i][i] sum2 += a[i][n-i-1] # [0,4] ..