목록코딩테스트 (25)
0과 1 사이
https://programmers.co.kr/learn/courses/30/lessons/92334 코딩테스트 연습 - 신고 결과 받기 문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 programmers.co.kr 이 문제는 어렵지 않았다. 간단하게 풀었지만 풀면서 어.. 이거 해시 쓰는거네? 좀더 간단하게 풀수 없나 하는 생각이 들었다. 실제 시험 보는것처럼 5시간동안 7문제 풀었어서 풀자마자 넘어갔는데 다 풀었으니깐~~ 이제 코드 개선을 해보려고 한다. 처음 작성한 코드 원래 코드도 나쁘지는 않지만, id 명단을 입력하는 배열 id_list, id 별로 신고한 ..
음... 내 코드의 문제가 뭘까. bfs 함수를 호출하면 count값만 리턴하고, 배열은 그대로 두어야하는데.... 배열도 바꿔서 저장이 된다. 왜지..? 지역변수이기 때문에 함수를 호출할 때마다 배열에 저장된 값은 사라지는게 아닌가? 고민이 필요하다. from collections import deque n, m = map(int, input().split()) def bfs(mapp): count = 0 x = mapp q = deque() for i in range(n): for j in range(m): if x[i][j] == 2: q.append([i,j]) while q: i,j = q.popleft() x[i][j] = 2 if i + 1 < n: if x[i+1][j] == 0: q.ap..
처음에는 순차탐색을 이용했다. 이진탐색을 구현할 생각은 못했는데, 탐색 범위가 1에서 10억까지인걸 보니 이진탐색으로 구현해야 효율적으로 코드를 구성할수 있다. 그래서 답지를 보고 참고한 코드 n, m = map(int, input().split()) #떡 개수와 필요한 떡 길이 입력받기 rice = list(map(int, input().split())) #떡 길이 배열 생성 start = 0 end = max(rice) result = 0 #이진 탐색 수행 while(start mid: #총 떡의 양 계산 total += x - mid if total < m: #떡의 양이 부족하면 더 많이자르기. 왼쪽 부분 탐색 end = mid - 1 else: #떡의 양이 충분하면 덜 자르기. 오른쪽 부분 탐색 ..
이 문제는 다이나믹 프로그래밍을 연습하기위해 푼 문제다. 처음 작성한 코드는 아래와 같은데, 나중에 d 배열을 출력할 때 7, 11, 13, 17 등 소수에 대해서만 0값이 출력된다는 문제가 있다. n에 대한 값은 정확히 출력된다. 아. 밑의 코드는 d[n]만 정확히 구하기 위한 함수로서, 7, 11, 13 등의 소수는 호출되지 않는다. 그렇다면 반복문을 이용하여 1~n에 대해 모두 정확히 구하려면 코드를 개선해야한다. x = int(input()) d = [0] * (x+1) def mincount(n): if n == 1: return 0 if d[n] != 0: return d[n] if n % 5 == 0: d[n] = min(mincount(n//5) + 1, mincount(n-1) + 1) ..
아직 dfs를 잘 모르는것 같아 dfs 예제를 풀어봤다. n, m = map(int, input().split()) ice = [] for i in range(n): ice.append(list(map(int,input()))) count = 0 def dfs(i, j): if i = n or j = m: return False if ice[i][j] == 1: return False ice[i][j] = 1 dfs(i+1, j) dfs(i, j+1) dfs(i-1, j) dfs(i, j-1) return True for i in range(n): for j in range(m): if dfs(i, j) == True: count += 1 print(count) 그런데..
몇몇 테스트 케이스에서 통과했는데 10개의 테스트 케이스에서 런타임 에러로 실패했다. 왜인지 계속 들여다봤는데 내 코드가 답지와도 유사해서 더 모르겠더라. 계속 보니까 조건 하나를 빠트려서 실패했다. 기둥일 경우 보의 한쪽 끝부분 위에 있는 경우는 2가지가 있다. 나는 1가지 경우만 체크했었음 .. 그래서 그 조건만 추가하니까 통과! def istrue(answer): #조건 모두 만족하는지 확인 for i in answer: if i[2] == 0: #기둥 if i[1] == 0: #바닥 위에 있는 경우 continue row = [i[0] - 1, i[1], 1] row_2 = [i[0], i[1], 1] col = [i[0], i[1] - 1, 0] if row in answer or row_2 i..
처음엔 deque를 이용해 구현했다. from collections import deque def solution(food_times, k): if sum(food_times) 0 : queue.append(j) break return queue.popleft() + 1 그러나 효율성 제로..ㅜ 효율성이 o(n2)이라 그런것같다. 답지를 보면서 코드를 수정한 결과 import heapq def solution(food_times, k): if sum(food_times)
굉장히 뻘짓을 했다.. 이 문제는 dfs나 bfs 로 풀어야하는것 같다. ㅜ 아. dfs로 풀면 최단거리가 나오지 않는다. 최단거리 문제는 bfs로 풀어야한다. 정답 코드.. from collections import deque n, m = map(int, input().split()) gamemap = [i for i in range(101)] #게임판. i번째 칸에는 i로 이동 distance = [0] * 101 # 1번부터 해당칸까지의 거리 for i in range(n+m): x, y = map(int, input().split()) gamemap[x] = y #게임판. 사다리가 있으면 x번째 칸에서 y로 이동 p = 1 queue = deque([p]) while p != 100: #1~6 까..