Baekjoon

Baekjoon/구현

[백준] 1946 신입 사원 (실버1)

문제요약 나의 코드 및 설명 01 - 이중 for문으로 한 명의 성적을 나머지의 성적과 비교 (시간초과) import sys t = int(input()) for test_case in range(1,t+1): n = int(input()) result = [] for _ in range(n): result.append(list(map(int, sys.stdin.readline().split()))) cnt = 0 for i in range(n): #한 명의 서류, 면접 성적을 뽑는다. check = True for j in range(n): #나머지와 서류, 면접 성적을 비교한다. if j == i: #만약 비교 대상이 본인이라면 continue #다음 사람과 비교 #만약 나머지의 성적과 비교했을 때,..

Baekjoon

[백준] 11478 서로 다른 부분 문자열의 개수 (실버3) / list, set, dict 시간복잡도 비교

문제요약 나의 코드 및 설명 01 - list(시간초과) 리스트로 풀려고 했다가 시간초과가 발생했다. s = list(input()) length = len(s) v = [] for l in range(1,length+1): for i in range(length-l+1): check = "".join(map(str, s[i:i+l])) if check not in v: v.append(check) print(len(v)) 나의 코드 및 설명 02 - set set을 써서 문제를 해결할 수 있었다. set의 추가 연산은 이다. s = input() result = set() for l in range(len(s)): for i in range(len(s)-l+1): temp = s[i:i+l] resul..

Baekjoon

[백준] 1269 대칭 차집합 (실버4) / set

문제요약 나의 코드 및 설명 n, m = map(int, input().split()) a_list = set(map(int, input().split())) b_list = set(map(int, input().split())) ans = len(a_list-b_list) + len(b_list-a_list) print(ans) 피드백 set을 이용하여 차집합을 구할 수 있다. 실버 문제가 맞나싶을 정도로 간단한 문제.

Baekjoon

[백준] 1436 영화감독 숌 (실버5) / 브루트포스

문제요약 나의 코드 및 설명 n = int(input()) cnt = 0 title = 666 #영화제목(1번째 시리즈는 666) #영화제목을 1씩 증가시켜주면서 666이 포함되었는지 확인하는 반복문 while True: if "666" in str(title): #영화제목에 666이 포함되어 있다면 cnt += 1 #시리즈 카운트 title += 1 #영화제목을 1증가하면서 666이 포함되었는지 확인 if cnt == n: #만약 n번째 시리즈라면 break #반복문 탈출 print(title-1) #영화제목 출력 피드백 와.. 그리 어렵지 않은 문제인데 너무 어렵게 생각했다가 힌트 보고 풀었다. 반성해야겠다. 브루트포스, 구현 문제를 많이 풀어봐야겠다고 느꼈고, 알고리즘 공부도 계속해서 열심히 공부해..

Baekjoon/이분탐색

[백준] 10816 숫자 카드 2 (실버4) / 이분탐색

문제요약 나의 코드 및 설명 n = int(input()) s = list(map(int, input().split())) s.sort() d = {} #개수 담을 딕셔너리 생성 for i in range(len(s)): if s[i] not in d: #만약 딕셔너리에 없다면 d[s[i]] = 1 #해당 값에 카운트 1 else: #만약 이미 딕셔너리에 있다면 d[s[i]] += 1 #해당 값에 카운트 += 1 m = int(input()) num_list = list(map(int, input().split())) result = [] #이분탐색 시작 for x in num_list: #두 번째 숫자리스트에 있는 값을 하니씩 확인 start = 0 #시작 인덱스 : 0 end = n-1 #끝 인덱스 ..

Baekjoon

[백준] 1620 나는야 포켓몬 마스터 이다솜 (실버4)

문제요약 나의 코드 및 설명 01 - 리스트 활용 (시간초과) import sys n, m = map(int, input().split()) lst = [] for _ in range(n): lst.append(sys.stdin.readline()) for _ in range(m): x = sys.stdin.readline() if 65

Baekjoon/이분탐색

[백준] 10815 숫자 카드 (실버5) / 이분탐색

문제요약 나의 코드 및 설명 n = int(input()) a = list(map(int, input().split())) a.sort() m = int(input()) b = list(map(int, input().split())) result = [] for x in b: start = 0 end = n-1 ans = False while start x: end = mid-1 elif a[mid] < x: start = mid+1 else: ans = True break if ans: result.append(1) else: result.append(0) print(" ".join(map(str, result))) 피드백 이전에 풀었던 이분탐색 문제와 크게 다르지 않은 문제여서 역시나 이분탐색 알고리..

Baekjoon/이분탐색

[백준] 1920 수 찾기 (실버4) / 이분탐색

문제요약 나의 코드 및 설명 n = int(input()) a = list(map(int, input().split())) a.sort() #비교 대상 리스트 정렬 m = int(input()) b = list(map(int, input().split())) for x in b: start = 0 #시작 : 인덱스 0 end = n-1 #끝 : 마지막 인덱스 ans = False while start end가 아닐 때까지 mid = (start + end) // 2 #중간값을 찾는다. if x > a[mid]: #찾는 값이 중간값보다 크다면, start = mid + 1 #다음 반복 시에 중간값 이후의 값 부터 찾는다. elif x < a[mid]: #찾는 값이 중간값보다 작다면, end = mid - ..