백준 10425번 - 피보나치 인버스

백준 10425번 바로가기 나의 풀이 f = [0] + [1]*100009 for i in range(2,100009): f[i] = f[i-1] + f[i-2] for _ in range(int(input())): if (n:=int(input())) == 1: print(2) else: print(f.index(n)) CODE REVIEW python의 강력함을 몸소 체험할 수 있는 문제였다. 정수 자료형의 범위가 무제한이라 큰 숫자를 저장할 수 있다는게 다른 언어에 비해서 너무 편리하다. index() method을 이용해서 문제를 풀어냈다.

2023-5-25 · 1 min · 58 words · Junha

백준 10815번 - 숫자 카드

백준 10815번 바로가기 나의 풀이 _ = int(input()) sk = set(map(int,input().split())) _ = int(input()) check = list(map(int,input().split())) for i in check: if i in sk: print(1, end=' ') else: print(0, end=' ') CODE REVIEW 두 숫자열을 비교해서 있는지/없는지 판단하는 문제 첫 번째 들어오는 수열을 set() 처리하면 찾는 속도가 개선된다.

2023-5-25 · 1 min · 49 words · Junha

백준 13777번 - Hunt The Rabbit

백준 13777번 바로가기 나의 풀이 def binary_search(data, target): data.sort() start = 0 end = len(data) - 1 arr = [] while start <= end: mid = (start+end)//2 arr.append(mid+1) if data[mid] == target: return arr elif data[mid] < target: start = mid + 1 else: end = mid - 1 import sys for i in sys.stdin: if int(i) == 0: break print(*binary_search([i for i in range(1,51)],int(i))) CODE REVIEW 이분 탐색을 연습할 수 있는 괜찮은 문제. 이분 탐색 과정에서 mid로 사용하는 요소가 몇번째인지 출력해야했다. 재귀를 활용한 이분 탐색 구현 방법을 공부하고 이 문제를 다시 풀어봐야겠다.

2023-5-23 · 1 min · 93 words · Junha

백준 2776번 - 암기왕

백준 2776번 바로가기 풀이 1 for _ in range(int(input())): _ = int(input()) note1 = set(map(int, input().split())) _ = int(input()) for i in map(int, input().split()): if i in note1: print(1) else: print(0) 풀이 2 def binary_search(data, target): data.sort() start = 0 end = len(data) - 1 while start <= end: mid = (start+end)//2 if data[mid] == target: return 1 elif data[mid] < target: start = mid + 1 else: end = mid - 1 return 0 for _ in range(int(input())): _ = int(input()) note1 = list(map(int, input().split())) _ = int(input()) note2 = list(map(int, input().split())) for i in note2: print(binary_search(note1, i)) CODE REVIEW 처음에는 단순히 input을 받고 in으로 확인해서 쉽게 풀어냈다. 그런데 이분 탐색에 속한 문제이니만큼 이분 탐색을 활용해서 풀어보기로 했다. 아직 이분 탐색을 구현하는게 익숙하진 않은데, 자주 보면서 익숙하도록 숙련해야겠다. 참고 링크

2023-5-23 · 1 min · 131 words · Junha

백준 10816번 - 숫자 카드 2

백준 10816번 바로가기 첫 번째 시도 n = int(input()) list = [int(i) for i in input().split()] m = int(input()) for i in input().split(): print(list.count(int(i)), end=" ") 역시나 그대로 코드를 짰더니 시간초과 error… list내의 모든 요소를 매번 읽어내다보니 시간이 오래 걸림. list대신 dictionary 사용해보자. 두 번째 시도 _ = int(input()) dict = {} for i in list(map(int,input().split())): if i in dict: dict[i] += 1 else: dict[i] = 1 _ = int(input()) for i in input().split(): if int(i) in dict: print(dict[int(i)], end=" ") else: print(0, end=" ") 고수의 풀이 from collections import* _,a,_,b=open(0) c=Counter(a.split()) for v in b.split():print(c[v]) 출처 CODE REVIEW list을 매번 읽는 것은 느리다. list를 사용하려면 탐색 방법을 개선해야하고 dictionary와 같은 다른 방법을 살펴보아야 한다. 고수의 풀이에서는 collections 라이브러리 안의 Counter() 함수를 사용하였다. 리스트를 먹이면 알아서 갯수 딕셔너리를 뱉어주는 아주 유용한 함수다. python builtin 함수가 뭐뭐 있는지 아는 것도 실력인듯…?!

2023-5-16 · 1 min · 140 words · Junha