목록workspace/algorithm_implementation (149)
HwangHub
2309번: 일곱 난쟁이 아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다. www.acmicpc.net 문제 풀이 주어진 배열로부터 조합을 이용하여 7개를 뽑고, 그 합이 100인 경우를 출력하면 되는 문제이다. 첫 번째 시도 from itertools import combinations as cb arr = list() for _ in range(9): arr.append(int(input())) for case in cb(arr, 7): # print(sum(case)) if sum(case) == 100: ans = sorted(case) print('\n'.join..
15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 중복 조합을 이용하여 출력을 하는 문제이다. 앞서 학습한 순열과 조합 문제들과 비슷한 문제라고 생각하면 된다. 정답 코드 from itertools import combinations_with_replacement as cbwr n, m = map(int, input().split()) arr = [i for i in range(1, n+1)] for x in cbwr(arr, m): print(' '.join(map(str, x)))
1718번: 암호 Vigenere cipher이라는 암호화 방법은 암호화하려는 문장 (평문)의 단어와 암호화 키를 숫자로 바꾼 다음, 평문의 단어에 해당하는 숫자에 암호 키에 해당하는 숫자를 더하는 방식이다. 이 방법을 변 www.acmicpc.net 문제 풀이 평문과 암호화 키를 받고, 평문을 iterator로 보면서 문자를 만날 때마다 암호화 키를 이용하여 인코딩하면 되는 문제다. 1. 평문과 암호화 키를 리스트로 입력받는다. 2. 암호화 키는 평문과 달리 계속 반복될 여지가 있으므로 그 인덱스 값을 나타내기 위해 k_idx 변수를 추가하였다. 3. loop를 통해 평문의 각 인덱스의 character를 변수 x에 저장하고, x가 문자이면 암호화를 진행하고 공백이면 패스한다. 이 때, 공백인 경우에도..

15820번: 맞았는데 왜 틀리죠? '테스트케이스(TestCase)'란 사용자가 제출한 코드가 옳은 답을 출력하는지 판단하기 위한 데이터다. 한 문제는 여러 개의 테스트케이스를 가지며, 문제를 '맞았다'는 것은 해당 문제의 모든 테스 www.acmicpc.net 문제 풀이: 주어진 값들을 간단하게 비교해주면 되는 문제였다. 첫 번째 시도: import sys input = sys.stdin.readline n, m = map(int, input().split()) sample_right = True system_right = True # sample case for i in range(n): a, b = input().split() print(a == b) sample_right = (a == b) if..
7795번: 먹을 것인가 먹힐 것인가 심해에는 두 종류의 생명체 A와 B가 존재한다. A는 B를 먹는다. A는 자기보다 크기가 작은 먹이만 먹을 수 있다. 예를 들어, A의 크기가 {8, 1, 7, 3, 1}이고, B의 크기가 {3, 6, 1}인 경우에 A가 B를 먹을 www.acmicpc.net 최종 코드 import sys input = sys.stdin.readline t = int(input()) ans = list() for i in range(t): n, m = map(int, input().split()) a = sorted(list(map(int, input().split())), key= lambda x:-x) b = sorted(list(map(int, input().split())))..

첫 번째 시도 input = __import__('sys').stdin.readline d = dict() for _ in range(int(input())): n = input() if n in d.keys(): d[n] += 1 else: d[n] = 1 max_value = max(list(d.values())) pos_keys = list() neg_keys = list() for i in d.keys(): if int(i) > 0: pos_keys.append(i) pos_keys.sort() if int(i)
3985번: 롤 케이크 첫째 줄에 롤 케이크의 길이 L (1 ≤ L ≤ 1000)이 주어진다. 둘째 줄에는 방청객의 수 N (1 ≤ N ≤ 1000)이 주어진다. 다음 N개 줄에는 각 방청객 i가 종이에 적어낸 수 Pi와 Ki가 주어진다. (1 ≤ Pi ≤ Ki www.acmicpc.net 첫 번째 시도 L = int(input()) # 롤 케이크의 길이 N = int(input()) # 방청객의 수 li = list() # 기대하는 조각의 길이 리스트 d = dict() # 실제 차지한 조각 딕셔너리 for guest in range(1, N+1): p, k = map(int, input().split()) # 종이에 적어낸 조각의 범위 li.append(k - p) for i in range(p, k..
문제 14724번: 관리자는 누구? PROBRAIN, GROW, ARGOS, ADMIN, ANT, MOTION, SPG, COMON, ALMIGHTY중 동문 커뮤니티 관리자로 선발되는 후보가 소속한 동아리의 이름을 대문자로 출력한다. www.acmicpc.net 문제 해석 9개의 동아리 부원들이 백준 문제를 각각 풀었는데, 1. 각 동아리 (최소) 부원 수는 계속 달라지며 2. 각 동아리별로 백준 문제를 가장 많이 푼 사람이 그 동아리의 대표가 되고 3. 동문 커뮤니티 관리자는 모든 동아리 대표 중 가장 많은 문제를 푼 사람이 된다. 4. 단, 여기서 각 동아리의 순서는 고정이다. 문제 풀이 우선 동아리 이름 별로 대표가 존재하고 그 대표가 푼 문제 수가 중요하므로, 동아리 이름과 그 동아리 대표가 푼 ..

문제 15917번: 노솔브 방지문제야!! 어떤 수 a가 2의 거듭제곱꼴로 나타내어진다고 해 봅시다. 그렇다면, a = 2n (단 n ≥ 0인 정수) 를 만족할 겁니다. 보통, 각 비트별로 검사를 하면서, 켜져 있는 비트의 개수를 알아내는 것도 좋은 www.acmicpc.net 문제 해석 주어진 숫자를 2^n으로 딱 떨어지게 표현할 수 있으면 1, 아니면 0을 출력해야 하는 문제이다. 문제 풀이 숫자를 2의 거듭제곱인지 아닌지 판별하는 가장 쉬운 방법은, 십진수인 정수를 이진수로 변환하여 생각하는 것이다. 이진수로 변환했을 때, 전체 자리 중 1이 가장 첫 번째 자리에 한 번만 등장하는 경우에 2의 거듭제곱이라는 점을 이용하였다. 전체 코드 input = __import__('sys').stdin.read..