백준 251

[백준, 파이썬, 9242번] 폭탄 해제

풀이 흐음 뭔가 노가다로 푼거 같긴하지만.. 우선 입력 받은 값을 반복문의 슬라이싱을 통해 순서에 맞게 추가한 다음 기존 입력했던 _dic에 요소가 있다면 result로, 없다면 BOOM!! 을 출력한 뒤, flag 변경한 다음, 반복문 탈출 flag가 True의 경우만 result를 6으로 나눈 나머지 확인 후 출력하여 문제 해결 import sys input = sys.stdin.readline _dic = { '**** ** ** ****':'0', ' * * * * *':'1', '*** ***** ***':'2', '*** **** ****':'3', '* ** **** * *':'4', '**** *** ****':'5', '**** **** ****':'6', '*** * * * *':'7'..

알고리즘 2023.09.06

[백준, 파이썬, 21317번] 징검다리 건너기

풀이 DP를 활용해서 나름 괜찮게 접근하고 풀었다고 생각했는데 뭔가 조금 꼬여서 시간이 꽤 걸렸다. 우선 처음에는 작은 점프, 큰 점프, 매우 큰 점프를 한번에 순회하면서 조회하려 했지만 반례는 맞지만 제출이 안되어서 따로 분리하여 풀이를 했음. 그래서 작은, 큰 점프를 우선 진행한 다음 매우 큰 점프를 적용한 코드를 후에 적용 import sys input = sys.stdin.readline n = int(input()) jump = [list(map(int,input().rstrip('\n').split())) for _ in range(n-1)] dp = [sys.maxsize]*n dp[0] = 0 for i in range(n-1): if i+1

알고리즘 2023.09.05

[백준, 파이썬, 17144번] 미세먼지 안녕!

풀이 우선 pypy 제출로 시간 효율적이지는 않은 코드인 것 같지만 푼 것에 의의를 두기 그리고 1초가 지난 후의 결과는 금방 나왔는데.. 이상하게 n초가 지난 후의 결과가 이상하게 변경되어서 몇 시간을 고생한 결과... visited 를 초기화 시키지 않아서 였다는 아주 슬픈 상황을 경험했다. # pypy 제출 # 먼지 확산 -> 공기청정기 순환 # 공기 청정기의 경우 가에 있는 '테두리 영역'만 순환 import sys import copy from pprint import pprint input = sys.stdin.readline def Diffusion(h,w,val): global r,c,tc find = [] for a,b in [[-1,0],[1,0],[0,-1],[0,1]]: dy,dx ..

알고리즘 2023.09.04

[백준, 파이썬, 9613번] GCD 합

풀이 GCD = Greatest Common Divisor = 최대공약수 최대공약수를 구하는 방법은 유클리드 호제법을 기억하고 있어서 빠르게 풀 수 있었다. def GCD(a,b): while b != 0: a,b = b,a%b return a import sys input = sys.stdin.readline for _ in range(int(input())): li = list(map(int,input().rstrip('\n').split())) result = 0 for i in range(1,li[0]+1): for j in range(i+1,li[0]+1): result += GCD(li[i],li[j]) print(result)

알고리즘 2023.09.04

[백준, 파이썬, 16195번] 1, 2, 3 더하기 9

풀이 초기엔 재귀 함수를 사용해서 계속해서 값을 찾도록 했었지만 시간초과 이후 DP라고 해서 규칙을 찾고 난 다음 힌트를 얻게 됨. 우선 해당 수의 값은 1,2,3 번 이전의 수가 만들 수 있는 값의 합과 같다는 힌트를 얻음 그런데 여기서 또 해당 문제는 원하는 자릿수를 주기에 더 골치가 아팠다. 그래서 최대로 배열을 만든 다음 계속해서 값을 만들어준 다음 문제를 해결 정답 코드 def startSetting(): li[1][1] = 1 li[2][1] = 1 li[2][2] = 1 li[3][1] = 1 li[3][2] = 2 li[3][3] = 1 import sys input = sys.stdin.readline val = 1000000009 li = [[0]*1001 for _ in range(1..

알고리즘 2023.09.02

[백준, 파이썬, 18258번] 큐 2

풀이 deque를 사용하여 pop을 popleft()로 사용해서 풀이 파이썬에서는 switch가 없기에 조건문이 너무 길어서 따로 함수로 빼내어 가독성을 그나마 좋게 하려고 했음 def check(_inVal): if _inVal[0] == 'push': q.append(_inVal[1]) elif _inVal[0] == 'pop': if len(q): print(q.popleft()) else: print(-1) elif _inVal[0] == 'size': print(len(q)) elif _inVal[0] == 'empty': if len(q): print(0) else: print(1) elif _inVal[0] == 'front': if len(q): print(q[0]) else: print(..

알고리즘 2023.09.02

[백준, 파이썬, 17123번] 배열 놀이

풀이 처음 접근한 방법은 문제처럼 2차원 배열의 값을 계속해서 변경한 다음 반복문을 통해 가로, 세로의 합을 출력하는 형식으로 제출했으나... 시간초과 한참을 코드 수정하고 했지만 잘 안되서 서칭을 한 뒤 힌트를 얻게 되었는데 힌트는 2차원 배열의 값을 바꾸는 것보다 합산한 값을 미리 만들어 둔 다음 입력값으로 받아오는 v의 값을 누적합 하여 계산하는 방법. 그래서 미리 result에 배열을 만든 다음 가로, 세로 값을 0,1번째 인덱스에 추가 이후 v의 값을 위치에 맞게 누적합하여 출력해서 해결 정답 코드 import sys input = sys.stdin.readline for _ in range(int(input())): n,m = map(int,input().rstrip('\n').split())..

알고리즘 2023.09.01

[백준, 파이썬, 1934번] 최소공배수

풀이 처음 접근한 방법은 a,b 가 같아질 때까지 값을 더하는 방식으로 풀었지만 python은 시간초과 pypy는 제출 성공 그래서 문제의 아래를 확인해보니 유클리드 호제법이 있어서 확인한 다음 풀이 최소 공배수를 찾기위해선 최대 공약수를 먼저 계산한 다음 풀이 최대 공약수는 a,b = b, a%b 로 b가 0이 될 때까지 구한 a의 값 최소 공배수는 a*b // 최대공약수 정답 코드 # 유클리드 호제법 import sys input = sys.stdin.readline for _ in range(int(input())): a,b = map(int,input().rstrip('\n').split()) result = a*b if b>a: a,b = b,a while b != 0: a,b = b, a%b ..

알고리즘 2023.09.01