반응형

알고리즘 142

[파이썬, Python] 백준 21610: 마법사 상어와 비바라기

문제https://www.acmicpc.net/problem/21610 코드import sysinput = sys.stdin.readlinen, m = map(int, input().split())buckets = [list(map(int, input().split())) for _ in range(n)]cloud = [[n - 1, 0], [n - 1, 1], [n - 2, 0], [n - 2, 1]]def move_cloud(): move_cloud = [] order = [(0, 0), (0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1), (1, 0), (1, -1)] d, s = map(int, input().split()) dir =..

[파이썬, Python] 백준 1940: 주몽

문제 https://www.acmicpc.net/problem/1940 1940번: 주몽 첫째 줄에는 재료의 개수 N(1 ≤ N ≤ 15,000)이 주어진다. 그리고 두 번째 줄에는 갑옷을 만드는데 필요한 수 M(1 ≤ M ≤ 10,000,000) 주어진다. 그리고 마지막으로 셋째 줄에는 N개의 재료들이 가진 고 www.acmicpc.net 코드 n = int(input()) m = int(input()) a = sorted(list(map(int, input().split()))) cnt = 0 start = 0 end = n - 1 while start m: end -= 1 elif a[start] + a[end] < m: start += 1 el..

[파이썬, Python] 백준 1120: 문자열

문제 https://www.acmicpc.net/problem/1120 1120번: 문자열 길이가 N으로 같은 문자열 X와 Y가 있을 때, 두 문자열 X와 Y의 차이는 X[i] ≠ Y[i]인 i의 개수이다. 예를 들어, X=”jimin”, Y=”minji”이면, 둘의 차이는 4이다. 두 문자열 A와 B가 주어진다. 이때, A의 www.acmicpc.net 코드 a, b = input().split() ans = list() for i in range(len(b) - len(a) + 1): cnt = 0 for j in range(len(a)): if a[j] != b[i+j]: cnt += 1 ans.append(cnt) print(min(ans)) 설명 우선 각 입력값을 받아준다. b의 개수에서 a의 ..

[파이썬, Python] 백준 9375: 패션왕 신해빈

문제 https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat), (turban), (sunglasses), (hat,sunglasses), (turban,sunglasses)로 총 5가지 이다. www.acmicpc.net 코드 import sys input = sys.stdin.readline t = int(input()) for i in range(t): ans = 1 clothes = dict() n = int(input()) for i in range(n): _, a = input().split() if a no..

[파이썬, Python] 백준 11652: 카드

문제 https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 코드 import sys input = sys.stdin.readline n = int(input()) card = dict() for i in range(n): a = int(input()) if a not in card: card[a] = 0 card[a] += 1 print(max(sorted(card), key = card.get)) 설명 n을 입력받고, card의 딕셔너리를 이..

[파이썬, Python] 백준 1057: 토너먼트

문제 https://www.acmicpc.net/problem/1057 1057번: 토너먼트 김지민은 N명이 참가하는 스타 토너먼트에 진출했다. 토너먼트는 다음과 같이 진행된다. 일단 N명의 참가자는 번호가 1번부터 N번까지 배정받는다. 그러고 난 후에 서로 인접한 번호끼리 스타를 www.acmicpc.net 코드 n, a, b = map(int, input().split()) cnt = 0 while True: cnt += 1 if (a+1) // 2 == (b+1) // 2: print(cnt) break else: a = (a+1) // 2 b = (b+1) // 2 n, a, b = map(int, input().split()) cnt = 0 while a != b: cnt += 1 a -= a ..

[파이썬, Python] 백준 1748: 수 이어 쓰기 1

문제 https://www.acmicpc.net/problem/1748 1748번: 수 이어 쓰기 1 첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다. www.acmicpc.net 코드 n = int(input()) len_n = len(str(n)) cnt = 0 for i in range(len_n - 1): cnt += 9 * 10 ** i * (i+1) print(cnt + (n - 10 ** (len_n - 1) + 1) * len_n) 설명 단순하게 수를 구해서 푸는 문제라기엔 주어진 범위가 넓어서 규칙성을 찾아야 했다. 혼자서는 찾지 못해서 검색을 통해 해결했다. n의 규칙은 이렇다. 자릿수 1개의 경우: 숫자는 1~9까지 존재, 모두 더하면 자리수가 9개 자릿수 2개의 경우:..

[파이썬, Python] 백준 10610: 30

문제 https://www.acmicpc.net/problem/10610 10610번: 30 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한 www.acmicpc.net 코드 nums = list(input()) nums.sort(reverse = True) cnt = 0 for i in nums: cnt += int(i) if cnt % 3 != 0 or "0" not in nums: print(-1) else: print(''.join(nums)) 설명 우선 각 수를 리스트로 받아서 저장해 두고 큰 수를 만들기 위해서 역순으로 정렬을 해주자. 30의 배수가..

[파이썬, Python] 백준 3036: 링

문제 https://www.acmicpc.net/problem/3036 3036번: 링 출력은 총 N-1줄을 해야 한다. 첫 번째 링을 제외한 각각의 링에 대해서, 첫 번째 링을 한 바퀴 돌리면 그 링은 몇 바퀴 도는지 기약 분수 형태 A/B로 출력한다. www.acmicpc.net 코드 from math import gcd n = int(input()) rings = list(map(int, input().split())) for i in range(1, n): x = gcd(rings[0], rings[i]) print(f'{rings[0] // x}/{rings[i] // x}') 설명 두 수의 최대공약수를 알아내서 최대공약수로 나눈 수를 형식에 맞게 출력하면 되는 문제였다. math에 있는 gcd..

[파이썬, Python] 백준 1476: 날짜 계산

문제 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 코드 e, s, m = map(int, input().split()) year = 1 while True: if ((year - e) % 15 == 0) and ((year - s) % 28 == 0) and ((year - m) % 19 == 0): break year += 1 print(year) 설명 간단하게 생각하면 금방 풀 수 있는 문제다. 1년부터 시작해서 연도를 1씩 늘리는데 년도에서..

반응형