본문 바로가기

코딩테스트 준비/백준18

[백준 1463번] 1로 만들기 - 동적 계획법 # 어렵다... 아이디어를 짜내려하는데 참 어렵다.. 처음 이 문제를 보고 풀이 방법을 생각해보는데 너무 복잡하여 마땅한 해결방법을 찾지 못했다. 따라서 일단은 작은 수부터 어떤식으로 1을 만들 수 있을지를 계산해 보았다. # 1 # 2 1 # 3 1 # 4 3 1, 4 2 1 # 5 4 2 1 ,5 4 3 1 # 6 2 1 # 7 6 2 1 # 8 4 2 1 # 9 3 1 # 10 9 3 1 # 11 10 9 3 1 # 12 4 2 1 # 13 12 4 2 1 # 14 7 6 2 1 # 15 5 4 2 1 # 16 8 4 2 1 # 17 16 8 4 2 1 # 17 16 15 5 4 2 1 이런 식으로 최소한의 경우로 1을 만들 수 있겠구나 하는 생각이 들었고 최대한 규칙을 찾아보았다. 1. 3의 제곱.. 2022. 1. 14.
[백준 1620번] 나는야 포켓몬 마스터 이다솜 # 전직 포켓몬 마스터로서 문제의 제목을 보자마자 참을 수 없었다. 하지만 포켓몬 마스터의 길은 멀고도 험했다... -- 처음 짠 코드 import sys N, M = map(int, input().split()) # 도감에 수록되어있는 포켓몬의 개수 N, 맞춰야 하는 문제의 개수 M dogam = {} for i in range(N): dogam[i+1] = sys.stdin.readline().strip() question = [] for i in range(M): question.append(sys.stdin.readline().strip()) for i in range(len(question)): # 숫자의 string형과 일반 string이 섞여있을 때 이를 판단 ( 예외 처리 ) try: qu.. 2022. 1. 13.
[백준 1018번] 체스판 다시 칠하기 # 사실 이 문제는 20일정도 전에 먼저 시도해보았던 문제이다. 하지만 그 때는 접근 방법을 정확히 파악하지 못해서 ( 너무 어렵게 생각했던것 같다 ) 예외가 많은 코드를 짜서 제출했던것 같다. 이 문제를 풀 때 처음 생각했던 것은, 주어진 보드는 무조건 8x8보다 크기 때문에 8x8 사이즈의 직사각형을 움직여가며 바꿔야 하는 횟수를 count, 가장 적은 횟수를 출력하면 되겠구나..! 하는 아이디어였다. 물론 코드 또한 그렇게 만들었다. -- 내가 짠 코드 import sys N, M = map(int, sys.stdin.readline().split()) # N * M 크기의 보드 board = [] for _ in range(N): # sys.stdin.readline()은 개행문자를 받기때문에 s.. 2022. 1. 10.
[백준 2805번] 나무 자르기 - 이분탐색 예제 # 오늘은 오후 약속이 있어 한문제만 딱 풀고 나가려했는데.. 처음 짠 코드는 항상 정답이 아니다.. -- 처음 짠 코드 # 필요한 나무 m미터 # 절단기에 지정할 높이 H 의 최댓값을 구하기 N, M = map(int, input().split()) tree = list(map(int, input().split())) height = 0 # 절단기에 설정할 높이 while True: tree_check = 0 # 반복때마다 가져갈 수 있는 나무의 양 체크 for i in range(N): if tree[i]-height>0: tree_check += (tree[i]-height) else: continue # 설정한 높이보다 주어진 나무가 낮다면 0 if tree_check < M: break else.. 2022. 1. 8.
[백준 2869번] 달팽이는 올라가고 싶다 제목만 보고 달팽이 배열 문제일 거라 생각했다. 생각해보니 달팽이 배열에선 위로 올라갈 수가 없지 -- 처음 짠 코드 a, b, v = map(int, input().split()) # 무조건 출력은 낮에 올라갔을 때 반복문이 중단되어 이루어질것 day = 1 # 걸리는 날짜 ( 일단 올라갔다고 생각 ) up = a # 올라간 높이 ( 올라갔다해 ) while up < v: day += 1 up -= b up += a print(day) 생각이 가는대로 코드를 짜보았다. 물론 3번째 예시를 넣는 순간 아차 싶었다. 10억까지 100씩더하고 99씩 빼고 있었다 ㅋㅋㅋ 1씩 더해 10억까지 가는데는 1분정도 더 걸리는군.. 참 이렇게 코드를 한번 짜고 다시 생각하려면 머리가 더 아픈 것 같다. 아무래도 하루.. 2022. 1. 6.
[백준 1966번] 프린터 큐 - 큰 수부터 출력하여라 -- 처음 짠 코드 import sys T = int(sys.stdin.readline()) # 테스트케이스의 수 for _ in range(T): n, m = map(int, sys.stdin.readline().split()) # 문서의 개수, 알고싶은 문서의 현재 위치 important = list(map(int, sys.stdin.readline().strip().split())) answer_list = [] while len(answer_list) 인덱스가 -2일때 n-2로 바꾸는게 잘못되어 m의 값이 잘못되게된다. => n-2를 len(important) -1로 수정 , 하지만 아직 오류 1은 해결되지 않음 -> 프린트를 해 answer_list를 갈때와 그냥 순서를 뒤로 보낼때 구하려는 인.. 2022. 1. 5.