분류 전체보기 208

백준 알고리즘(파이썬) - 1436번 / in, not in(포함연산자)

영화감독 숌 https://www.acmicpc.net/problem/1436 1436번: 영화감독 숌 666은 종말을 나타내는 숫자라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타 www.acmicpc.net 666이 연속으로 들어가는 숫자들을 차례대로 찾아야 한다. 처음에는 666을 고정시켜 놓고 _666, _ _666 과 같이 빈 칸에 수를 배열할까 생각했다. 그런데 이렇게하면 _666_과 같은 경우를 따로 생각해줘야 하기 때문에 모든 수를 순서대로 탐색하는 방법으로 코드를 작성했다. 1 2 3 4 5 6 7 8 9 N = int(input()) num = 666 while True:..

알고리즘 2021.08.24

백준 알고리즘(파이썬) - 1018번

체스판 다시 칠하기 https://www.acmicpc.net/problem/1018 1018번: 체스판 다시 칠하기 첫째 줄에 N과 M이 주어진다. N과 M은 8보다 크거나 같고, 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 보드의 각 행의 상태가 주어진다. B는 검은색이며, W는 흰색이다. www.acmicpc.net 다시 칠하기 위한 칸 수를 구하는데 쉽게 구하는 방법을 생각해봤지만 결국 모든 경우의 수를 확인하는 쪽으로 코드를 작성했다. 이런식으로 하나하나 옮겨가며 확인해야 한다. 여기에서 배열을 확인하는 시작점을 (a, b)라고 설정하고, 아래의 코드를 작성했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 N, M = map(int, input()..

알고리즘 2021.08.24

백준 알고리즘(파이썬) - 7568번

덩치 https://www.acmicpc.net/problem/7568 7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 덩치 등수는 자신보다 더 "큰 덩치"의 사람의 수로 정해진다. 만일 자신보다 더 큰 덩치의 사람이 k명이라면 그 사람의 덩치 등수는 k+1이 된다고 정의되어 있다. 그대로 코드를 작성했다. 1 2 3 4 5 6 7 8 9 10 N = int(input()) body = [] for _ in range(N): body.append(list(map(int, input().split(..

알고리즘 2021.08.23

백준 알고리즘(파이썬) - 2231번

분해합 구하기 https://www.acmicpc.net/problem/2231 2231번: 분해합 어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 www.acmicpc.net 분해합을 구하는 것은 작성할 수 있겠는데 생성자는 어떻게 해야할지 막막했다. 어떤 범위의 수들을 확인해야할지 감이 오지 않아서 검색을 통해 코드를 작성했다. 1 2 3 4 5 6 7 8 9 10 N = int(input()) result = 0 for i in range(1, N+1): A = list(map(int, str(i))) result = i ..

알고리즘 2021.08.23

백준 알고리즘(파이썬) - 2798번

https://www.acmicpc.net/problem/2798 2798번: 블랙잭 첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장 www.acmicpc.net 둘째줄에 주어진 수들 중 세 수를 뽑아 합을 정해진 수에 가장 가깝게 만들면 된다. 1 2 3 4 5 6 7 8 9 10 N, M = map(int, input().split()) numbers = list(map(int, input().split())) blackjack = 0 for i in range(N-2): for j in range(i+1, N-1): f..

알고리즘 2021.08.23

백준 알고리즘(파이썬) - 11729번

하노이 탑 이동 순서 https://www.acmicpc.net/problem/11729 11729번: 하노이 탑 이동 순서 세 개의 장대가 있고 첫 번째 장대에는 반경이 서로 다른 n개의 원판이 쌓여 있다. 각 원판은 반경이 큰 순서대로 쌓여있다. 이제 수도승들이 다음 규칙에 따라 첫 번째 장대에서 세 번째 장대로 www.acmicpc.net 하노이탑의 원리는 알겠는데 수행 과정을 출력하는 방법을 생각해봐도 떠오르지 않았다. 함수에 변수를 하나만 넣을 생각을 해서 탑을 옮기는데 어떨 땐 첫 번째 막대에서, 어떨 땐 두 번째 막대에서 이동해야 하는 것을 어떻게 다뤄야 할지 몰랐다. 결국 검색을 통해 답을 알아봤다. 1 2 3 4 5 6 7 8 9 10 11 12 def hanoi(n, start, end..

알고리즘 2021.08.18

백준 - 2447번 / map(), join()

별 찍기 https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net 문제를 보고 원리도 이해했고, 코딩이 아닌 스스로 문제를 풀려면 가능했다. 그런데 사람이 생각할땐 문제의 3*3 패턴을 기준으로 생각해서 어떻게 해야할지 감이 오지 않았다. *** *** * * 옆에 * * 을 어떻게 이어서 출력할 수 있을까 고민했지만 답을 찾지 못했다ㅠ *** *** 결국 고민하다가 인터넷 검색을 통해 찾아봤다. 1 2 3 4 5 6 7 8 ..

알고리즘 2021.08.17

백준 - 10870번

피보나치 수 https://www.acmicpc.net/problem/10870 10870번: 피보나치 수 5 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 www.acmicpc.net 피보나치의 수는 0번째 수 = 0, 첫 번째 수 = 1로 정해져 있다. 1 2 3 4 5 6 7 def fibonacci(num): if num == 0: return 0 elif num == 1: return 1 else: return fibonacci(num - 1) + fibonacci(num - 2) n = int(input()) prin..

알고리즘 2021.08.13

백준 - 10872번

팩토리얼 https://www.acmicpc.net/problem/10872 10872번: 팩토리얼 0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오. www.acmicpc.net 팩토리얼은 정의에 따라 재귀함수로 쉽게 구할 수 있다. 0!과 1!을 1로 반환해주면, 나머지 값들은 자연스럽게 구할 수 있다. 1 2 3 4 5 6 7 def factorial(num): if num == 0: return 1 elif num == 1: return 1 else: return num * factorial(num - 1) N = int(input()) print(factorial(N)) cs

알고리즘 2021.08.13

백준 - 1002번

터렛 https://www.acmicpc.net/problem/1002 1002번: 터렛 각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다. www.acmicpc.net 두 원의 접점의 개수를 구하는 문제다. 기하학 문제를 푼게 너무 오랜만이어서 여러가지 조건을 빠뜨리지 않는 것이 까다롭게 느껴졌다. 두 원의 중심, (x1, y1)과 (x2, y2)사이의 거리가 0인 경우와 아닌 경우로 크게 나눠서 d == 0인 경우를 먼저 처리하고 continue로 다음 케이스를 처리하도록 만들었다. d != 0인 경우는 세 경우가 있어서 if문을 사용했다. 만나지 않는 경우와 한 점에서 만난 경우는 or로, 마지막의 두 점..

알고리즘 2021.08.11