[파이썬] 백준 1764 : 듣보잡 https://www.acmicpc.net/problem/1764 1764번: 듣보잡 첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. www.acmicpc.net 실버 4 문자열, 정렬, 해시 의외로 시간초과가 나지 않는 문제. 중복을 허용하지 않으니까 set을 사용하면 되고, 두 set의 교집합을 정렬해서 출력하면 끝난다. 코드 import sys; input = sys.stdin.readline N, M = map(int, input().split()) d = set(input().rstrip() for _ in r..
[파이썬] 백준 15652 : 나는야 포켓몬 마스터 https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 실버 4 자료구조, 해시를 사용한 집합과 맵 접근 포켓몬 이름에 대한 리스트를 먼저 만들고, 내가 문자를 입력하면 해당 포켓몬의 인덱스값 + 1을 출력하고, 숫자를 입력하면 숫자 -1의 인덱스에 위치한 포켓몬의 이름을 출력하도록 하고 싶었다. 파이썬에서는 input()이든 sys.stdin.readline()을 쓰든 ..
[파이썬] 백준 15652 : N과 M(4) https://www.acmicpc.net/problem/15652 15652번: N과 M (4) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 실버 3 백트래킹 접근 중복된 순열을 구하는 간단한 문제. 파이썬은 itertools 라이브러리의 combinations_with_replacement 를 이용하면 쉽게 중복 순열을 구할 수 있다. 코드 from itertools import combinations_with_replacement import sys N, M = map(int, sys...
[파이썬] 백준 1789 : 수들의 합 https://www.acmicpc.net/problem/1789 1789번: 수들의 합 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. www.acmicpc.net 실버 5 그리디 알고리즘, 수학 접근 N개의 자연수의 합이 입력한 값과 같을때, N의 최댓값을 구하는 문제이다. 이때 N개의 자연수는 전부다 다른 값을 가져야 한다. 합을 이루고 있는 자연수들이 최대가 되기 위해서는 값이 작을수록 좋을 것이다. 200을 입력했다면 1+2+3+4+5...로 계속해서 합산을 해주고, 200을 몇번째로 넘어가는지 확인하면 될 것이다. 코드 S = int(input()) sum = 0 N = 0 for i in range(1, S+1): sum +=..
[파이썬] 백준 1931 : 회의실 배정 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 실버 2 그리디 알고리즘, 정렬 접근 회의 시작 시간, 끝나는 시간이 모두 빠르면 빠를수록 가능한 회의의 개수가 많아진다. 예를 들어, 1~4시에 끝나는 회의 다음으로 올 수 있는 것은 4시와 같거나 큰 회의 시간뿐이다. 또한, 회의 시간이 가장 먼저 끝나는 회의는 반드시 겹치지 않는 회의에 포함된다. (겹치지 않는 회의의 최대 개수를 구하므로) 회의가 끝나는 시간을 기준으로 오름차순 정렬을 하면 처음 회의를 기준으로 다음 회의의 시작시간이 겹칠 수 있는지 없는지에 대한 ..
[파이썬] 백준 1541 : 잃어버린 괄호 https://www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 www.acmicpc.net 실버2 수학, 문자열, 그리디 알고리즘, 파싱 접근 최솟값으로 만들려면 빼는 부분의 값이 커야한다. 우선 입력받은 값을 마이너스를 기준으로 구분해야 하고, 나누어진 오른쪽 부분의 모든 값을 전부 더해준다음, 맨 처음 값에다가 빼주면 된다. 55-50+40의 경우, -를 기준으로 나누면 55, 50+40이 된다. 50+40을 더하면 90이 되고, 이를..