파이썬 알고리즘 : 짝수와 홀수

2023년 12월 02일 알고리즘 문제풀이 문제 짝수와 홀수 난이도 Lv.1 코드 1 2 3 4 5 6 def solution(num): if num%2: answer = 'Odd' else: answer = 'Even' return answer

2023년 12월 2일 · 1 분 · 배준수

파이썬 알고리즘 : 3 x n 타일링

2023년 11월 28일 알고리즘 문제풀이 문제 3 x n 타일링 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution(n): dp = [0 for _ in range(5001)] dp[2] = 3 dp[4] = 11 for i in range(1,n+1): if n%2: return 0 if i%2: continue else: if not dp[i]: tmp = 2 tmp += dp[i-2]*dp[2] for x in range(2,i//2): tmp += dp[i-2*x]*2 dp[i] = tmp%1000000007 return dp[n] 진짜 어렵다. 홀수는 나올수 없으므로 무조건 0이라는 것은 일찍 발견했다. 하지만 일반항을 위한 점화식을 구하기가 어려웠다. 처음에 한 추론은 다음과 같다. ...

2023년 11월 28일 · 2 분 · 배준수

파이썬 알고리즘 : 공원산책

2023년 11월 27일 알고리즘 문제풀이 문제 공원산책 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 def solution(park, routes): H = len(park) W = len(park[0]) a = 0 b = 0 for i in range(H): for j in range(W): if park[i][j] == 'S': a = i b = j def check(p,q,x,y): for i in range(1,q+1): if p == 'N': if x-i < 0 or park[x-i][y] == 'X': return False elif p == 'S': if x+i >= H or park[x+i][y] == 'X': return False elif p == 'E': if y+i >= W or park[x][y+i] == 'X': return False elif p == 'W': if y-i < 0 or park[x][y-i] == 'X': return False if p == 'N': return x-q,y elif p == 'S': return x+q,y elif p == 'E': return x,y+q elif p == 'W': return x,y-q i = 0 while i < len(routes): way_to_go, distance_to_go = routes[i].split() if not check(way_to_go,int(distance_to_go), a,b): i += 1 continue a,b = check(way_to_go,int(distance_to_go), a,b) i += 1 return [a,b] 어렵진 않은데 좀 귀찮고.. 그렇다. 그래도 이런 문제 많이 풀어서 어렵진 않다. 레벨이 1인 이유는 문제에서 따져야 하는 경우를 모두 설명해줘서 그런듯 하다. ...

2023년 11월 27일 · 2 분 · 배준수

파이썬 알고리즘 : 2 x n 타일링

2023년 11월 17일 알고리즘 문제풀이 문제 2 x n 타일링 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 def solution(n): dp = [0 for _ in range(60001)] x = 1 while x <= n: if x == 1: dp[x] = 1 elif x == 2: dp[x] = 2 else: dp[x] = (dp[x-1] + dp[x-2])%1000000007 x += 1 return dp[n] 많이 볼 수 있는 DP문제이다. 2 x n 일땐 이전 조합들을 합친 것만으로도 다음 갯수를 산출할 수 있어서 크게 어렵지 않다. 수가 커지기 때문에 나머지로 표시해야 한다는 사실을 잠시 잊었다.. ...

2023년 11월 17일 · 1 분 · 배준수

파이썬 알고리즘 : X만큼 간격이 있는 n개의 숫자

2023년 11월 16일 알고리즘 문제풀이 문제 X만큼 간격이 있는 n개의 숫자 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 def solution(x, n): answer = [] d = x num = x while len(answer) < n: answer.append(num) num += d return answer 크게 어려울 것 없는 문제였다. 문제에 제한 조건이 주어지는데 while문에 추가하면 마지막 테스트 케이스에서 틀린다. 문제가 알아서 제한하여 준다는 뜻이니 걸지 말것. ...

2023년 11월 16일 · 1 분 · 배준수

파이썬 알고리즘 : 124 나라의 숫자

2023년 11월 14일 알고리즘 문제풀이 문제 124 나라의 숫자 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 def solution(n): nums = [] while n: a = n%3 if a: n = n//3 nums.append(str(a)) else: n = n//3 -1 nums.append('4') nums.reverse() answer = ''.join(nums) return answer 코드 자체는 단순해보이지만 해결하는데 정말 어려운 문제였다. 등장할 수 있는 숫자가 3개(1,2,4)였기 때문에 3진법을 이용하면 될 것 같다는 생각 자체는 바로 떠올렸다. 하지만 답을 유추해내기 쉽지 않았는데 추가적인 조건이 있기 때문이다. 아래 표를 통해 설명하겠다. ...

2023년 11월 14일 · 2 분 · 배준수

파이썬 알고리즘 : 신고 결과 받기

2023년 11월 13일 알고리즘 문제풀이 문제 신고 결과 받기 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution(id_list, report, k): n = len(id_list) answer = [0 for _ in range(n)] table = [[0 for _ in range(n)] for _ in range(n)] for x in report: sender, receiver = x.split() a = id_list.index(sender) b = id_list.index(receiver) table[b][a] = 1 for i in table: if sum(i) >= k: for j in range(len(i)): if i[j]: answer[j] += 1 return answer 어떤 배열들을 만들어야 하는지 헷갈렸지만 크게 어려운 문제는 아니었다. ...

2023년 11월 13일 · 1 분 · 배준수

파이썬 알고리즘 : 게엠 맵 최단 거리

2023년 11월 10일 알고리즘 문제풀이 문제 게임 맵 최단 거리 난이도 Lv.2 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from collections import deque def solution(maps): answer = -1 n = len(maps) m = len(maps[0]) da = [1,-1,0,0] db = [0,0,1,-1] maps[0][0] = 0 q = deque() q.append([0,0,0]) while q: a,b,cnt = q.popleft() if a == n-1 and b == m-1: answer = cnt+1 print(a,b) return answer for i in range(4): na = a + da[i] nb = b + db[i] if na < 0 or na >= n or nb < 0 or nb >= m or not maps[na][nb]: continue q.append([na,nb,cnt+1]) maps[na][nb] = 0 return answer BFS를 이용해서 특정 조건(맵 상 벽이라던가, 맵 범위 밖이라던가, 방문한 곳이라던가)을 제외하여 최단 거리를 구하는 문제는 이제 충분히 적응됐다. ...

2023년 11월 10일 · 1 분 · 배준수

파이썬 알고리즘 : 평균 구하기

2023년 11월 9일 알고리즘 문제풀이 문제 링크 난이도 Lv.1 코드 1 2 3 def solution(arr): answer = sum(arr)/len(arr) return answer

2023년 11월 9일 · 1 분 · 배준수

파이썬 알고리즘 : 삼각 달팽이

2023년 10월 13일 알고리즘 문제풀이 문제 1 삼각달팽이 문제 링크 1차 시도 나의 생각 처음에는 각 삼각형의 높이마다 배열을 만들어주고 해당 높이에 append로 추가해주면 되겠다 생각했다. 하지만 정답을 출력할 때 순서대로 출력해야하다보니 각 배열 안에서의 순서가 지켜지지 않게 되는 것을 깨달았다. 따라서 각 행의 길이를 직접 정해주었다. i번째 행은 길이가 i가 되도록 배열을 만들었다. 삼각형 한 바퀴를 도는 것을 기준으로 함수를 만들었다. 함수의 인수 cnt는 넣을 숫자, l은 이번에 돌 삼각형의 한 변의 길이, idx는 출발이 몇번째 행인지를 나타내고, depth는 함수가 실행된 횟수이자 지금 도는 삼각형이 내부에서 얼마나 깊이 있는지를 의미한다. ...

2023년 10월 13일 · 2 분 · 배준수