알고리즘 351

[백준, 파이썬, 16926번] 배열 돌리기 1

풀이 pypy로 제출해서 겨우겨우 시간을 맞춘듯한 코드... 진짜 꾸역꾸역 올라가는거 보고 숨 참고 지켜보느라 힘들었다... 우선 보기에서 나온 것처럼 각 구역별 테두리가 있을 텐데 해당 테두리끼리 회전 수에 맞게 회전을 한 결과를 출력하면 된다. 그래서 주어진 n과 m 중 작은 수의 값에 2를 나눈 몫으로 테두리의 개수를 체크 이후 i,i 로부터 테두리를 한 바퀴 쭉 돌아다니면서 tmp 값을 현재 arr에 담아주고 현재 arr 값을 tmp에 담아주어 교체하는 식으로 해결 탐색을 하기 위한 조건 분기는 아래의 주석으로 체크 import sys input = sys.stdin.readline n,m,c = map(int,input().split()) arr = [list(map(int,input().rst..

알고리즘 2023.09.08

[백준, 파이썬, 2231번] 분해합

풀이 n 부터 0까지 반복문을 활용해 조사하면서 i+자릿수의 합을 한 결과가 n과 같을 경우 result에 할당 문제에서 가장 작은 분해합을 찾기에 새롭게 result를 갱신 그리고 만약 그대로 result가 0의 경우 그대로 0을 출력하여 해결 n = int(input()) result = 0 for i in range(n-1,0,-1): if n == i+sum(list(map(int,str(i)))): result = i if result: print(result) else: print(0)

알고리즘 2023.09.08

[백준, 파이썬, 1463번] 1로 만들기

풀이 deque를 활용한 BFS 방식의 풀이 ( 더 빠름 ) q에는 초기값으로 n과 0으로 값과 그에 따른 카운팅을 넣어주기 이후 3,2로 나누어 떨어지는 경우와 -1한 경우를 q에 추가하기만 해서 1이 되는 경우 제출을 했지만 시간초과가 발생하기에 가지치기를 해서 나누어 떨어질 경우 li에 cnt 값을 넣어주어 만약 중간에 q를 통해 접근했던 적이 있다면 더 이상 반복해서 조회하지 않도록 해서 풀이 DP를 활용한 풀이 li의 1,2,3 번 배열에 초기값을 채운 다음 3,2로 나누어 떨어지는 경우와 -1한 경우를 조사해서 해당 값의 li의 index 값에 +1 을 하는 방식 여기서 중요한 점으로 3과 2가 함께 나누어 떨어지는 경우가 있기에 조건 분기를 가장 처음에 해줘서 풀이! BFS 풀이 from c..

알고리즘 2023.09.07

[백준, 파이썬, 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