알고리즘(53)
-
백준 11652 - 카드 (Python)
문제 https://www.acmicpc.net/problem/11652 11652번: 카드 준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지 www.acmicpc.net 풀이 from collections import Counter a = Counter([int(input()) for i in range(int(input()))]) b = sorted(a.items(),key= lambda x:(-x[1],x[0])) print(b[0][0]) 파이썬의 collections 패키지의 Counter를 사용했다 Counter를 사용하면 리스트에 대하여 리스..
2024.02.12 -
백준 1431 - 시리얼 번호 (Python)
문제 https://www.acmicpc.net/problem/1431 1431번: 시리얼 번호 첫째 줄에 기타의 개수 N이 주어진다. N은 50보다 작거나 같다. 둘째 줄부터 N개의 줄에 시리얼 번호가 하나씩 주어진다. 시리얼 번호의 길이는 최대 50이고, 알파벳 대문자 또는 숫자로만 이루어 www.acmicpc.net 풀이 a = [] for _ in range(int(input())): s = input() a.append([len(s),sum([int(i) for i in s if i.isdigit()]),s]) a.sort(key=lambda x: (x[0],x[1],x[2])) for i in a: print(i[2]) 코드는 많이 줄여서 썼지만 알고리즘은 다음과 같다. [문자열의 길이, 숫자..
2024.02.12 -
백준 7785 - 회사에 있는 사람 (Python)
문제 https://www.acmicpc.net/problem/7785 7785번: 회사에 있는 사람 첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는 www.acmicpc.net 풀이 now = {} for _ in range(int(input())): n, c = input().split() now[n] = c answer = [n for n,v in now.items() if v=="enter"] answer.sort(reverse=True) for name in answer: print(name) 이름을 key로 현재 상태..
2024.02.12 -
백준 1351 - 무한 수열 (Python)
문제 https://www.acmicpc.net/problem/1351 1351번: 무한 수열 첫째 줄에 3개의 정수 N, P, Q가 주어진다. www.acmicpc.net 풀이 n, p, q = map(int,input().split()) memo = {} memo[0] = 1 def a(i): if i not in memo: memo[i] = a(i//p) + a(i//q) return memo[i] print(a(n)) n의 크기가 0 ≤ N ≤ 10^12 로 매우 크므로 DP 중 tabulation 방식으로는 풀수가 없었다. 크기가 10^12인 배열을 생성하니 그냥 오류를 뱉어 버리더라... 그래서 딕셔너리와 재귀함수를 이용하여 memoization 방식으로 구현해주었다. 재귀함수를 통해 a(i)..
2024.02.12 -
백준 7795 - 먹을 것인가 먹힐 것인가 (Python)
문제 https://www.acmicpc.net/problem/7795 7795번: 먹을 것인가 먹힐 것인가 심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 www.acmicpc.net 풀이 1. 완전탐색으로 풀이 import sys input = sys.stdin.readline for _ in range(int(input())): n, m = map(int,input().split()) a = list(map(int,input().split())) b = list(map(int,input().split())) a.sor..
2024.02.12 -
백준 9095 - 1, 2, 3 더하기 (Python)
문제 https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다. www.acmicpc.net 풀이 a = [int(input()) for i in range(int(input()))] target = max(a) save = [1] * (target + 1) save[1] = 1 save[2] = 2 save[3] = 4 for i in range(4,target+1): save[i] = save[i-1] + save[i-2] + save[i-3] for i in a: print(save[i]) 테스트케이스 만큼 입력을 받고 가장 큰 수만큼 배열을 생성하여 그 이하 숫자에 대해서 ..
2024.02.12