본문 바로가기

Python265

[백준 1476번] 날짜 계산 E, S, M = map(int,input().split()) RESULT_RANGE = 15*28*19 + 1 for i in range(RESULT_RANGE): a, b, c = i%15 + 1, i%28 + 1, i%19 + 1 if E == a and S == b and M == c: print(i + 1) break 이번 문제는 E, S, M 이라는 수를 가지는 년도를 나타낼 때, 주어진 E, S, M으로 표시되는 가장 빠른 년도를 구하는 문제이다. 다만, 여기서 주의해야할 점은 세 수는 모두 서로 다른 범위를 가진다는 점이다. 이 문제의 풀이에 핵심은 '가능한 경우의 수를 모두 탐색해보는 완전 탐색, 즉 Brute Force 알고리즘을 사용해야 한다는 점'과 '나머지를 활용하여 값을 비교한다.. 2023. 5. 4.
[백준 1107번] 리모컨 n = int(input()) m = int(input()) ans = abs(100 - n) if m != 0: # 고장난게 있을 경우만 인풋을 받음 broken = list(input().split()) else: broken = [] # 작은수에서 큰수로 이동할땐 500,000 까지만 보면 되지만 # 반대로 큰수에서 작은수로 내려올수도 있으므로 1,000,000 까지 봐야함 for i in range(1000001): for j in str(i): if j in broken: #해당 숫자 버튼이 고장난 경우 스탑 break else: # 번호를 눌러서 만들 수 있는 경우엔 ans = min(ans, len(str(i)) + abs(i - n)) #min(기존답, 숫자 버튼 클릭 수 + 해당 번호로부.. 2023. 5. 3.
[백준 3085번] 사탕 게임 n = int(input()) array = [[] for _ in range(n)] nx = [-1,1,0,0] ny = [0,0,-1,1] for i in range(n): array[i] = list(input()) # 행에서 연속된 문자의 개수를 확인하는 함수 def row_check(x,y): count = 1 for i in range(y,n+1): if i == n-1: break if array[x][i] == array[x][i+1]: count += 1 else: break for i in range(y,-1,-1): if i == 0: break if array[x][i] == array[x][i-1]: count += 1 else: break return count # 열에서 연속된.. 2023. 5. 2.
[백준 1037번] 약수 count = int(input()) real_measure = list(map(int,input().split())) real_measure.sort() print(real_measure[0] * real_measure[-1]) 이번 문제는 1과 N을 제외한 약수들이 주어졌을 때, N을 구하는 문제이다. 약수들을 오름차순으로 정렬했을 때, N은 양 끝자리에 위치한 값들의 곱이라는 것을 이용하여 쉽게 풀이할 수 있었다 :) 2023. 4. 14.
[백준 4375번] 1 while True: # 무한 입력 try: #무한 입력이기 때문에 파일의 끝 에러 EOF에러를 잡아주기 위한 try,catch 구문 작성 n = int(input()) num = 0 square = 0 while True: num += (10**square) if num % n == 0 : print(square+1) break square += 1 except EOFError: #파일의 끝에러 EOFError를 처리 break 이번 문제는 n의 배수중에 모든 자리의 수가 1인 값의 자리수를 출력하는 문제이다. 처음에 이 문제를 풀었을 때는 아래와 같이 n에 1부터 하나씩 곱해가면서, 각 자리의 수가 모두 1인지 확인해가며 풀었다. while True: input_data = int(input()) m.. 2023. 4. 14.
[백준 2293번] 동전1 n, k = map(int,input().split()) # 1차원 DP 테이블을 사용한 풀이 prices = [0] * n for i in range(n): prices[i] = int(input()) # dp[i] -> i원을 만들 때 가능한 경우의 수 dp = [0 for _ in range(k+1)] # dp[0] -> 0원을 만들 때 가능한 경우의 수, 동전을 사용하지 않는 경우 이므로 1로 초기화 dp[0] = 1 for price in prices: for i in range(price,k+1): dp[i] = dp[i] + dp[i-price] print(dp[k]) # 2차원 DP 테이블를 사용한 풀이(시간초과) # prices = [0] * (n+1) # for i in range(1,.. 2023. 4. 11.