전체 글 465

[ BOJ ] 5547 : 일루미네이션 ( GOLD 4 ) / Python

문제 부유한 집안의 상속자 상근이네 집은 그림과 같이 1미터의 정육각형이 붙어있는 상태이다. 크리스마스가 다가오기 때문에, 여자친구에게 잘 보이기 위해 상근이는 건물의 벽면을 조명으로 장식하려고 한다. 외부에 보이지 않는 부분에 조명을 장식하는 것은 낭비라고 생각했기 때문에, 밖에서 보이는 부분만 장식하려고 한다. 위의 그림은 상공에서 본 상근이네 집의 건물 배치이다. 정육각형 안의 숫자는 좌표를 나타낸다. 여기서 회색 정육각형은 건물의 위치이고, 흰색은 건물이 없는 곳이다. 위에서 붉은 색 선으로 표시된 부분이 밖에서 보이는 벽이고, 이 벽에 조명을 장식할 것이다. 벽의 총 길이는 64미터이다. 상근이네 집의 건물 위치 지도가 주어졌을 때, 조명을 장식할 벽면의 길이의 합을 구하는 프로그램을 작성하시오..

[ BOJ ] 17305 : 사탕 배달 ( GOLD 4 ) / Python

문제 사탕을 좋아하는 아기 석환은, 집에 N개의 사탕이 들어있는 자루를 들여놓았다. 자루에는 두 가지 종류의 사탕이 있는데, 작은 사탕은 3g의 무게를 가지고, 큰 사탕은 5g의 무게를 가진다. 똑똑한 아기 석환은 자루에 있는 모든 사탕에 대해서, 그 사탕의 당도 si 를 계산해 놓았다. si 는 양의 정수로, si 가 클수록 사탕은 달콤하다. shake! 2019 대회에 참가하기 위해 짐을 싸고 있는 아기 석환은, 달콤한 사탕을 최대한 많이 담아가서 대회 도중 당분을 보충하려고 한다. 하지만, 연약한 아기 석환은 가방에 최대 wg (w그램) 의 사탕만을 담을 수 있다. 아기 석환이 이 조건을 만족하면서 사탕을 담았을 때, 담아간 사탕의 당도의 합은 최대 얼마가 될 수 있을까? 입력 첫 번째 줄에 사탕의..

[ BOJ ] 17779 : 게리맨더링 2 ( GOLD 3 ) / Python

문제 재현시의 시장 구재현은 지난 몇 년간 게리맨더링을 통해서 자신의 당에게 유리하게 선거구를 획정했다. 견제할 권력이 없어진 구재현은 권력을 매우 부당하게 행사했고, 심지어는 시의 이름도 재현시로 변경했다. 이번 선거에서는 최대한 공평하게 선거구를 획정하려고 한다. 재현시는 크기가 N×N인 격자로 나타낼 수 있다. 격자의 각 칸은 구역을 의미하고, r행 c열에 있는 구역은 (r, c)로 나타낼 수 있다. 구역을 다섯 개의 선거구로 나눠야 하고, 각 구역은 다섯 선거구 중 하나에 포함되어야 한다. 선거구는 구역을 적어도 하나 포함해야 하고, 한 선거구에 포함되어 있는 구역은 모두 연결되어 있어야 한다. 구역 A에서 인접한 구역을 통해서 구역 B로 갈 수 있을 때, 두 구역은 연결되어 있다고 한다. 중간에..

[ BOJ ] 1038 : 감소하는 수 ( GOLD 5 ) / Python

문제 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 출력하는 프로그램을 작성하시오. 0은 0번째 감소하는 수이고, 1은 1번째 감소하는 수이다. 만약 N번째 감소하는 수가 없다면 -1을 출력한다. 입력 첫째 줄에 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수 또는 0이다. 출력 첫째 줄에 N번째 감소하는 수를 출력한다. 풀이 과정 백트래킹으로 모든 경우의 수를 찾아 정렬해서 N번째 감소하는 수를 출력한다. import sys input = sys.stdin.readline n = int(input().rstrip()) result..

[ AtCoder ] Boot camp for Beginners - ( ABC 048 ) B - Between a and b ...

https://atcoder.jp/contests/abc048/tasks/abc048_b B - Between a and b ... AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp a 와 b 사이에 있는 정수 중 x로 나누어 떨어지는 수를 찾기 위해, b를 x로 나눈 몫에서 a를 x로 나눈 몫을 뺀다. ( a가 x로 나누어 떨어지면 이를 포함해야 하므로, a가 x로 나누어 떨어지면 결과값에 1을 더한다. ) import sys input = sys.stdin.readline a, b, x = map(int, input()..

[ AtCoder ] Boot camp for Beginners - ( AGC 029 ) A - Irreversible operation

https://atcoder.jp/contests/agc029/tasks/agc029_a A - Irreversible operation AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp s[i] 번째 문자가 W면, W를 왼쪽으로 가져가기 위해 i 번 만큼 flip 해야 한다. 이전에 W가 k번 나왔다면, i - k 번 만큼 flip 해야 한다. import sys input = sys.stdin.readline s = input().rstrip() result = 0 cnt = 0 for i in range(len(s))..

[ AtCoder ] Boot camp for Beginners - ( ABC 156 ) C - Rally

https://atcoder.jp/contests/abc156/tasks/abc156_c C - Rally AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online. atcoder.jp 1부터 100까지 해당 좌표에서 미팅을 열었을 때의 포인트를 전부 계산하여 최소 포인트를 찾는다. import sys input = sys.stdin.readline n = int(input().rstrip()) arr = list(map(int, input().rstrip().split())) result = -1 for i in range(1, 101): now =..

[ BOJ ] 6603 : 로또 ( SILVER 2 ) / Python

문제 독일 로또는 {1, 2, ..., 49}에서 수 6개를 고른다. 로또 번호를 선택하는데 사용되는 가장 유명한 전략은 49가지 수 중 k(k>6)개의 수를 골라 집합 S를 만든 다음 그 수만 가지고 번호를 선택하는 것이다. 예를 들어, k=8, S={1,2,3,5,8,13,21,34}인 경우 이 집합 S에서 수를 고를 수 있는 경우의 수는 총 28가지이다. ([1,2,3,5,8,13], [1,2,3,5,8,21], [1,2,3,5,8,34], [1,2,3,5,13,21], ..., [3,5,8,13,21,34]) 집합 S와 k가 주어졌을 때, 수를 고르는 모든 방법을 구하는 프로그램을 작성하시오. 입력 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 ..

[ BOJ ] 10997 : 별 찍기 - 22 ( SILVER 2 ) / Python

문제 예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요. 입력 첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다. 출력 첫째 줄부터 차례대로 별을 출력한다. 풀이 과정 재귀 태그가 달려있긴 하지만, 토네이도 만들기를 구현해도 AC를 받는다! import sys input = sys.stdin.readline n = int(input().rstrip()) * 4 - 3 if n == 1: print('*') else: arr = [['*' for _ in range(n)] for _ in range(n+2)] now = [1, n - 1] row = [0, 1, 0, -1] col = [-1, 0, 1, 0] dir = 0 cnt = 0 while True: arr[now[0]][now[1]] = ' ' i..

[ BOJ ] 17087 : 숨바꼭질 6 ( SILVER 2 ) / Python

문제 수빈이는 동생 N명과 숨바꼭질을 하고 있다. 수빈이는 현재 점 S에 있고, 동생은 A1, A2, ..., AN에 있다. 수빈이는 걸어서 이동을 할 수 있다. 수빈이의 위치가 X일때 걷는다면 1초 후에 X+D나 X-D로 이동할 수 있다. 수빈이의 위치가 동생이 있는 위치와 같으면, 동생을 찾았다고 한다. 모든 동생을 찾기위해 D의 값을 정하려고 한다. 가능한 D의 최댓값을 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 105)과 S(1 ≤ S ≤ 109)가 주어진다. 둘째 줄에 동생의 위치 Ai(1 ≤ Ai ≤ 109)가 주어진다. 동생의 위치는 모두 다르며, 수빈이의 위치와 같지 않다. 출력 가능한 D값의 최댓값을 출력한다. 풀이 과정 수빈이는 D 간격으로만 움직일 수 있으므로, D는 동생들과의 거리..