목록Algorithm (18)
Hyun Seup Jo

# 선택 정렬 N = int(input()) num_list = [] for i in range(N): # 정렬하려는 값 N개만큼 입력 받기 num_list.append(int(input())) for i in range(N -1): # outer loop, 마지막 값은 자동정렬 되므로 N-1까지 min_idx = i for j in range(i + 1 , N): # 최소값 탐색 loop, i 다음 값 부터 비교 시작하므로 i + 1부터 시작 if num_list[min_idx] > num_list[j]: min_idx = j # 최소값 인덱스 업데이트 num_list[i], num_list[min_idx] = num_list[min_idx], num_list[i] # 위치 교체 for element ..

N = int(input()) dunchi = [] for i in range(N): dunchi.append(tuple(map(int, input().split()))) # 완전 탐색해가며 랭크 업데이트 for i in dunchi: rank = 1 for j in dunchi: if i[0] < j[0] and i[1] < j[1]: rank += 1 print(rank, end = ' ')

N = int(input()) begin = N - len(str(N)) * 9 flag = 0 if begin < 1: begin = 1 for i in range(begin, N): res = i for j in str(res): res += int(j) # 분해합 구하기 if res == N: flag = 1 print(i) break if flag == 0: print(0) 분해합을 찾기 위해서 굳이 0부터 탐색할 이유가 없다. 각 자릿수의 최대로 올수 있는 숫자는 9이다. 216라는 숫자를 예를 들어 설명하면 생성자를 탐색하기위해 시작할 수 있는 최댓값은 216 - (9 + 9 + 9) = 162인것이다. 따라서 162부터 216까지 탐색하여 분해합을 만족하는 값을 찾으면 되는 것이고 res +..

N, M = map(int, input().split()) card_list = list(map(int, input().split())) res= [] for i in range(len(card_list)): for j in range(i + 1, len(card_list)): for k in range(j + 1, len(card_list)): if (card_list[i] + card_list[j] + card_list[k])

# 666, 1666, 2666, 3666, 4666, 5666, ..., 10666, ..., 16660, 16661, ... # brute force Algorithm N = int(input()) number, cnt = 665, 0 while True: number += 1 if "666" in str(number): cnt += 1 if cnt == N: print(str(number)) break 영화제목은 666부터 시작하므로 굳이 1부터 차례대로 검사할 필요가 전혀없다. 따라서 number 변수를 665로 초기화 시키고 무한 루프내에서 number값을 1씩 증가 시켜가면서 "666"이 str(number)안에 존재한다면 cnt를 한다. cnt와 입력받은 N값이 같아지는 순간이 N번째 영화를..

# 반복문을 이용한 풀이 n = int(input()) fibonacci = [0, 1] if n == 0 or n == 1: print(fibonacci[n]) else: for i in range(n - 1): fibonacci.append(fibonacci[i] + fibonacci[i + 1]) print(fibonacci[-1]) # 재귀호출을 이용한 풀이 n = int(input()) def fibonacci(n): if n == 0 or n == 1: return n else: return fibonacci(n - 1) + fibonacci(n - 2) print(fibonacci(n))

# 반복문을 이용한 풀이 N = int(input()) res = 1 for i in range(N): res *= i + 1 print(res) # 재귀호출을 이용한 풀이 def factorial(N): if N == 0: return 1 else: return N * factorial(N - 1) N = int(input()) val = factorial(N) print(val)

N = int(input()) cnt, peel = 1, 1 while cnt < N: cnt += (6 * peel) # 계차수열 일반항 peel += 1 # 최소 지나가는 방의 갯수(== 껍질 갯수) print(peel) 한 껍질 내에 존재하는 방의 수를 가장 먼저 파악하였다. 안쪽부터 1껍질, 2껍질, 3껍질, ...이라고 했을 때 1껍질 늘어날때 마다 방의 갯수는 1, 7, 19, 37, ... 과 같은 수열을 가진다. 이는 또한 다음 껍질로 넘어가기 직전의 방 번호인것도 알 수 있다. 즉, 계차수열의 형태를 띄고 있으며 계차수열의 일반항은 아래와 같이 구할 수 있다. 그럼 여기서 b_k에 해당하는 b의 일반항을 구해야 한다. 일반항을 구한 결과 6k였다. 이와 같은 공식을 토대로 cnt += (..

N = int(input()) res = -1 for i in range(N): for j in range(N): if (5 * i) + (3 * j) == N: # 조건에 부합하지 않는다면 res는 업데이트 되지 않으므로 -1이다. res = i + j print(res) 가장 맨처음에 작성했던 방식은 일일이 경우를 나누어 작성하는 방식이었다. 1) 5의 배수인경우 2) 3의 배수이면서 5와 3의 조합으로 이루어질 수 있는 경우 3) 3의 배수이면서 5와 3의 조합으로 이루어질 수 없는 경우 4) 5 또는 3의 배수가 아니면서 5와 3의 조합으로 이루어질 수 있는 경우 5) 5 또는 3의 배수가 아니면서 5와 3의 조합으로 이루어질 수 없는경우 이렇게 떠올린 케이스는 총 5개인데 작성하다가 뇌정지와서 ..

croatian_alphabet = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] cnt = 0 usr_input = input() for character in croatian_alphabet: if character in usr_input: cnt += usr_input.count(character) usr_input = usr_input.replace(character, ' ') print(cnt + len(usr_input.replace(' ', ''))) usr_input에 크로아티아 알파벳이 존재하면 카운트를 한 후에 크로아티아 알파벳을 공백으로 대체한다. 만약 usr_input이 ljes=njak과 같다고 할 때 for문이 종료되면 '_e__ak'과..