백준
-
[CodingTest] 백준 골드 티어 도착 기록Free Contents 2021. 3. 23. 02:12
아름아름 1일 1문제 알고리즘 문제 풀이를 계속 하다보니 solved.ac에서 골드 티어에 도착해 있었다. (물론 못 푼날도 당연 존재한다...ㅋㅋㅋ) 알고리즘 괴수분들은 정말 많으시니까. 대단한 기록일리는 만무하지만, 그래도 예전 알고리즘 문제 유형도 몰랐던 갓난아기 시기에 비하면 정말 장족의 발전을 했다고 느낀다. 꾸역꾸역 어떻게든 잘해왔구나. 경험치 기록을 보니 본격적으로 백준을 풀기 시작한 12월 말즈음부터 대략 3개월 정도 걸렸나보다. 그동안 유형별 문제 풀이에 집중해서 그리디부터 DFS/BFS, DP, 최단경로 등 다양한 문제 유형에 대해 한 번 이상씩은 문제 풀이를 진행했다. 하지만 중간중간 기초가 될 수 있는 작은 유형들을 놓친 부분도 있어서, 이에 대해서 보강을 해야할 것 같다. 또한, ..
-
[백준 2581 math] 소수Coding Test/백준 2021. 3. 22. 06:13
# 문제 내 풀이 m = int(input()) n = int(input()) # 처음엔 모두가 소수인 것으로 초기화 (0과 1 제외) array = [True for _ in range(n + 1)] array[0], array[1] = False, False # 에라토스테네스의 체 알고리즘 수행 # 2부터 n의 제곱근까지의 모든 수를 확인하며 for i in range(2, int(n ** 0.5) + 1): if array[i]: # i를 제외한 i의 모든 배수를 지우기 j = 2 while i * j
-
[백준 1644번] 소수의 연속합Coding Test/백준 2021. 3. 22. 06:08
# 문제 내 풀이 # 2부터 4000000까지의 모든 수에 대하여 소수 판별 (n의 최대 입력) limit_num = 4000000 # 처음엔 모든 수를 소수(True)인 것으로 초기화(0, 1은 제외) array = [True for _ in range(limit_num + 1)] # 에라토스테네스의 체 알고리즘 수행 # 2부터 limit_num의 제곱근까지의 모든 수를 확인하며 for i in range(2, int(limit_num ** 0.5) + 1): if array[i] == True: # i를 제외한 i의 모든 배수를 지우기 j = 2 while i * j
-
[백준 1436번] 영화감독 숌Coding Test/백준 2021. 3. 19. 19:02
# 문제 내 풀이 n = int(input()) title = 666 # 영화 제목에 들어간 수 series = 1 # 해당 영화의 시리즈 순서 # n번째 영화를 찾을 때까지 완전 탐색 while series < n: # 숫자를 하나씩 늘려가며 title += 1 # 숫자에 '666'이 들어가면 영화 시리즈 개수로 셈 if '666' in str(title): series += 1 # n번째 영화의 제목에 포함된 수 출력 print(title) 시간 복잡도 O(N)
-
[백준 7568번] 덩치Coding Test/백준 2021. 3. 19. 03:16
# 문제 내 풀이 n = int(input()) # 사람들의 덩치 정보 입력 받기 people = [tuple(map(int, input().split())) for _ in range(n)] # 현재 사람의 덩치를 다른 모든 사람들과 비교하여 for i in range(n): rank = 1 # 만일 현재 사람보다 덩치가 큰 사람이 있다면, rank를 1 증가시킴 for j in range(n): if people[i][0] < people[j][0] and people[i][1] < people[j][1]: rank += 1 # 현재 사람의 등수 출력 print(rank, end=' ') 생각해볼 점 처음엔 입력 수가 많지 않아 조건에 맞춰 bubble sort를 한 후, 정렬된 정보대로 차례차례 비..
-
[백준 1806번] 부분합Coding Test/백준 2021. 3. 16. 23:20
# 문제 내 풀이 n, s = map(int, input().split()) data = list(map(int, input().split())) min_len = int(1e5) # 구하고자 하는 부분 수열 중 가장 짧은 것의 길이 interval_sum = 0 # 현재 부분 수열의 부분합 end = 0 # 투 포인터 알고리즘 수행 # start를 차례대로 증가시키며 반복 for start in range(n): # end를 가능한 만큼 이동시키기 while interval_sum = s and end - star..
-
[백준 2470번] 두 용액Coding Test/백준 2021. 3. 13. 01:49
# 문제 내 풀이 n = int(input()) data = list(map(int, input().split())) min_val = 2 * int(10e9) # 혼합 용액의 최소 특성값 left = 0 right = n - 1 data.sort() # 오름차순 정렬 # 양 끝의 포인터가 엇갈리기 전까지 while left < right: # 현재 가리키는 두 용액의 특성값 합이 최소 특성값이라면 최솟값 갱신 if abs(data[left] + data[right]) < min_val: min_val = abs(data[left] + data[right]) min_pair = (data[left], data[right]) # right가 가리키는 특성값의 절대값이 더 크다면 right를 1 감소시킴 i..
-
[백준 3273] 두 수의 합Coding Test/백준 2021. 3. 10. 20:53
# 문제 내 풀이 - 문제 풀이 실패, 수정 답안 n = int(input()) nums = list(map(int, input().split())) x = int(input()) cnt = 0 # (ai, aj) 쌍의 갯수 left = 0 # 왼쪽 인덱스 right = n - 1 # 오른쪽 인덱스 nums.sort() # 오름차순으로 정렬 수행 # 두 포인터가 교차할 때까지 while left x: right -= 1 continue l..