본문 바로가기

전체 글

(148)
[백준/6064/파이썬] 카잉 달력 소스코드 T = int(input()) def sol(m,n,x,y): while x
[백준/3085/파이썬] 사탕게임 - 브루트포스 소스코드 n = int(input()) board = [] ans =0 for _ in range(n): candy = list(map(str,input())) board.append((candy)) def count_candy(board): #개수세는 함수 N = len(board) max_candy = 1 for i in range(N): cnt = 1 for j in range(1,N): if board[i][j] == board[i][j-1]: cnt += 1 else : cnt = 1 if max_candy
[백준/1476/파이썬] 날짜계산 - 브루트포스 소스코드 E,S,M = map(int,input().split()) (ear,sun,moon) = (1,1,1) year = 1 while (ear,sun,moon) != (E,S,M): ear = ear + 1 sun = sun + 1 moon = moon +1 if ear > 15: ear = ear - 15 if sun > 28: sun = sun - 28 if moon > 19: moon = moon - 19 year += 1 print(year) 알고리즘 (1,1,1)에서 하나씩 증가하고 각각의 숫자가 최대치를 넘어가면 빼준다. 종료 조건은 입력값과 같아질때입니다
[백준/1339/파이썬] 단어수학 - 그리디 소스코드 n = int(input()) digit = [0]*26 for _ in range(n): num = list(input().rstrip()) for i in range(len(num)): digit[ord(num[i])-65] += 10 ** (len(num)-i-1) digit.sort(reverse=True) ans = 0 dig = 9 for i in digit: if not i: break ans += i*dig dig -= 1 print(ans) 알고리즘 이 문제는 그리디를 이용하여 풀 수 있는 문제이다. 찾아보니 딕셔너리를 이용한 풀이가 많았는데 입력이 대문자 알파벳이란 특성을 가지고 푸는 풀이가 있어서 힌트를 얻어 풀 수 있었다. ord('A')는 A의 아스키 코드 65를 나타내어..
[백준/1107/파이썬] 리모컨 - Brute force 소스코드 target = int(input()) ans = abs(100 - target) M = int(input()) if M: broken = set(input().split()) else: broken = set() for num in range(1000001): for N in str(num): if N in broken: break else: ans = min(ans, len(str(num)) + abs(num - target)) print(ans) 알고리즘 가능한 숫자 조합을 생각하여 문제를 푸려고 했는데 런타임에러가 자꾸 나서 다른 사람의 풀이를 참고했는데 그냥 무식하게 쭉 브루트 포스 알고리즘을 사용하여 풀면 되는 문제였다. 단순한게 또 먹히는 문제도 있는 걸 깨달았다.
[백준/1463/파이썬] 1로 만들기 - DP 소스코드 x = int(input()) dp = [0]*(x+1) dp[1] = 0 for i in range(2,x+1): dp[i] = dp[i-1] + 1 if i % 3 == 0: dp[i] = min(dp[i], dp[i // 3] + 1) if i % 2 == 0: dp[i] = min(dp[i], dp[i // 2] + 1) print(dp[x]) 알고리즘 DP문제는 많이 풀어봐서 이번 문제는 그리 어렵지는 않았다. 1이 되기 위해서 필요한 연산의 숫자를 구하는 것 이다. 2,3은 1에 2배,3배를 하면 된다. 4는 2까지 걸린 연산 횟수의 1번 더(2배) 하면 된다. 5는 4까지의 연산에 1번더(+1) 6은 2까지의 연산에 1번더(*2) 최소 횟수에 대해 전에 걸 불러와서 연산해 나가는 방..
[백준/6588/파이썬] 골드바흐의 추측 소스코드 import sys dp = [1] * (1000000 + 1) dp[0] = 0 dp[1] = 0 for i in range(2, 1001): #dp에 소수를 넣는 과정 (에라토스테네스의 체) if dp[i]: for j in range(i * i, 1000001, i): dp[j] = 0 def goldba(n): for i in range(2, n): if dp[i] and dp[n - i]: print(f'{n} = {i} + {n - i}') return 0 return 1 # 골드바흐 가설이 틀린걸 증명 해버림 while (1): try: n = int(sys.stdin.readline()) if n == 0: break if goldba(n): print("Goldbach's con..
[백준/16936/파이썬] 나3곱2 소스코드 N = int(input()) seq = list(map(int, input().split())) ans = [] for i in seq: can3 = 0 num = i while True: if i % 3 == 0: can3 += 1 i //= 3 else: break ans.append([can3, num]) ans.sort(key= lambda x: (-x[0], x[1])) for i in range(N): print(ans[i][1], end=' ') 알고리즘 list에 있는 숫자들이 모두 2와 3으로 이루어져 있는것을 보고 소인수 분해를 해봤다. 4 = 2^2 8 = 2^3 6 = 2 * 3 3 = 3 12 = 2^2 * 3 9 = 3^2 그리고 출력 결과를 보니깐 3을 인수로 많이 ..