Programming/Algorithm 237

[백준] #1620 나는야 포켓몬 마스터 이다솜 python

https://www.acmicpc.net/problem/1620 1620번: 나는야 포켓몬 마스터 이다솜 첫째 줄에는 도감에 수록되어 있는 포켓몬의 개수 N이랑 내가 맞춰야 하는 문제의 개수 M이 주어져. N과 M은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수인데, 자연수가 뭔지는 알지? 모르면 www.acmicpc.net 📕 설명 📕 1. N개의 포켓몬 도감을 set에 넣는다. 2. 문제들을 받는다. 3. 문제를 순회하며 포켓몬 도감에서의 값을 가져온다. => 계속된 시간 초과를 해결하기 위하여 dictionary를 하나 더 만들어서 해결하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N, M = map(int ,input().split()) pokemon_encyclopedia_id = {} p..

[백준] #14425 문자열 집합 python

https://www.acmicpc.net/problem/14425 14425번: 문자열 집합 첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다. 다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어 www.acmicpc.net 📕 설명 📕 N개의 값을 set에 넣고, M개의 값을 list에 넣은 후 list를 순회하며 하나씩 set에 값이 있는지 확인해준다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N, M = map(int ,input().split()) prev_str = set() config_str = [] for i in range(N): prev_str.add(input()) for i i..

[백준] #10815 숫자 카드 python

https://www.acmicpc.net/problem/10815 10815번: 숫자 카드 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net 📕 설명 📕 N개의 수를 set에 넣고 M개의 수를 리스트로 만들어, M list를 하나씩 방문하여 체크한다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) N_list = set(map(int,input().split())) M = int(input()) M_list = list(map(int,input().split())) result = [] for..

[백준] #1018 체스판 다시 칠하기 python

https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 📕 설명 📕 하나씩 비교하는 brute-force로 풀이하였다. 사중 for문으로 구성 되었다..... 좀 더 간략한 방법을 찾아보자. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N ,M = map(int, input().split()) black_and_white = [] for i in range(N): black_and_white.append(input()) result = [] for x in r..

[백준] #1436 영화감독 숌 python

https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 📕 설명 📕 하나씩 비교하는 brute-force로 풀이하였다. 가장 작은 수인 666부터 시작하여 하나씩 비교해가며 풀이하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) six_number = 666 count = 0 result = 0 while True: if '666' in str(six_number): count += 1 if count == N: result = si..

[백준] #7568 덩치 python

https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 📕 설명 📕 하나씩 비교하는 brute-force로 풀이하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) tmp_list = [] result_list = [] for i in range(N): kg, cm = map(int, input().split()) tmp_list.append([kg, cm]) for i in tmp_list: cnt = 0 for j in ..

[백준] #2231 분해합 python

https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 📕 설명 📕 주어진 수보다 작은 수들을 리스트에 다 넣은 후, 하나씩 비교해가며 생성자인지를 확인한다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) N_list = [i for i in range(1, N)] result_list = [] for i in N_list: tmp_val = i for j in str(i): tmp_val += int(j) i..

[백준] #2798 블랙잭 python

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 📕 설명 📕 수의 나열을 리스트로 받아서 itertools의 combinations를 이용하여 부분 집합을 구하여 3개씩 잘라서 합을 구하여 구현하였다. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 from itertools import combinations N, M = map(int, input().split()) blackjak_list = list(map(int, input..

[백준] #11729 하노이 탑 이동 순서 python

https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 📕 설명 📕 하노이 탑 알고리즘을 고려하여 문제 풀이. 재귀 중 가장 대표적인 문제. 1. 탈출 조건 설정하기 2. 일정 규칙 구현 3. 가장 큰 과정을 머릿속으로 구현하며 따라가기 이 과정에서 3가지 단계로 나눌 수 있다. 1번 : 하노이 탑 N - 1개를 가운데로 옮긴다. 2번 : 제일 큰 원판을 target 위치로 옮긴다. 3번 : N - 1개를 target 위치로 옮긴다. 🧑🏻..

[백준] #2447 별 찍기 python

https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 📕 설명 📕 재귀를 이용하여 별 찍기 구현. 🧑🏻‍💻 나의 풀이 🧑🏻‍💻 N = int(input()) def star(N): if N == 3: return ['***', '* *', '***'] arr = star(N//3) stars = [] for i in arr: stars.append(i * 3) for i in arr: stars.append(i + ' '*..