백트래킹 20

백준(JAVA) 6603번 로또 풀이

Java으로 구현한 6603번 로또 문제 풀이입니다. https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); while (true) { int k = sc.nextInt(); if (k == 0) bre..

백준(Python) 1182번 부분수열의 합 풀이

Python으로 구현한 1182번 부분수열의 합 문제 풀이입니다. https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net from itertools import combinations n, s = map(int, input().split()) data = list(map(int, input().split())) result = 0 for i in range(1, n + 1) : for value in combinat..

백준(Python) 6603번 로또 풀이

Python으로 구현한 6603번 로또 문제 풀이입니다. https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net from itertools import combinations while True : try : data = list(map(int, input().split())) if data[0] == 0 and len(data) == 1 : break del data[0] result = [] for combi in combinations..

백준(Python) 23290번 마법사 상어와 복제 풀이

Python으로 구현한 23290번 마법사 상어와 복제 문제 풀이입니다. https://www.acmicpc.net/problem/23290 23290번: 마법사 상어와 복제 첫째 줄에 물고기의 수 M, 상어가 마법을 연습한 횟수 S가 주어진다. 둘째 줄부터 M개의 줄에는 물고기의 정보 fx, fy, d가 주어진다. (fx, fy)는 물고기의 위치를 의미하고, d는 방향을 의미한다. 방향 www.acmicpc.net # ←, ↖, ↑, ↗, →, ↘, ↓, ↙ (45도 반시계 주의! - 물고기 이동) dx = [0, -1, -1, -1, 0, 1, 1, 1] dy = [-1, -1, 0, 1, 1, 1, 0, -1] # 상어 (상좌하우) 연속해서 3칸 이동 shark_dx = [-1, 0, 1, 0] s..

백준(Python) 12100번 2048 (Easy) 풀이

Python으로 구현한 12100번 Easy 문제 풀이입니다. https://www.acmicpc.net/problem/12100 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net from copy import deepcopy n = int(input()) data = [list(map(int, input().split())) for _ in range(n)] result = 0 def left(board) : for i in range(n) : p = 0 # 열의 가장 좌측 x = ..

백준(Python) 15684번 사다리 조작 풀이

Python으로 구현한 15684번 사다리 조작 문제 풀이입니다. https://www.acmicpc.net/problem/15684 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net n, m, h = map(int, input().split()) visited = [[False] * (n + 1) for _ in range(h + 1)] data = [] for _ in range(m) : a, b = map(int, input().split()) visited[a][b] = True def check() :..

백준(Python) 14889번 스타트와 링크 풀이

Python으로 구현한 14889번 스타트와 링크 문제 풀이입니다. https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net def cal_diff(team1, team2) : sum_team1 = 0 sum_team2 = 0 for i in range(len(team1)) : for j in range(len(team1)) : sum_team1 += board[team1[i]][team1[j]] sum_team2 += board[team2[i]][team2[j]] retu..

백준(Python) 19236번 청소년 상어 풀이

Python으로 구현한 19236번 청소년 상어 문제 풀이입니다. https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net import copy # 4 x 4 크기의 정사각형에 존재하는 각 물고기의 번호(없으면 -1)와 방향 값을 담는 테이블 array = [[None] * 4 for _ in range(4)] for i in range(4) : data = list(map(int, input().split())) # 매 줄마다 4마리..

백준(Python) 18428번 감시 피하기 풀이

Python으로 구현한 18428번 감시 피하기 문제 풀이입니다. https://www.acmicpc.net/problem/18428 18428번: 감시 피하기 NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복 www.acmicpc.net from itertools import combinations n = int(input()) # 복도의 크기 board = [] # 복도 정보(N x N) teachers = [] # 모든 선생님 위치 정보 spaces = [] # 모든 빈 공간 위치 정보 for i in range(n) : board.append(list..

백준(Python) 14888번 연산자 끼워넣기 풀이

Python으로 구현한 14888번 연산자 끼워넣기 문제 풀이입니다. https://www.acmicpc.net/problem/14888 14888번: 연산자 끼워넣기 첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, www.acmicpc.net n = int(input()) # 연산을 수행하고자 하는 두 리스트 data = list(map(int, input().split())) # 더하기, 빼기, 곱하기, 나누기 연산자 개수 add, sub, mul, div = map(int, input().split()) # ..