목록코딩 테스트 (186)
미소를뿌리는감자의 코딩
https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 1. 접근 방법 이번 문제는 dfs가 아닌 bfs로 접근해야하는 문제라고 생각이 들었다. 같은 level에 위치한 값에 대해서, 좌우상하 퍼져나가는 것을 같은 시간대에 진행해야하기 때문이다. 만약 dfs로 진행한다면, 한 익은 토마토에 대해서 전체 박스에 퍼져나간 후, 다음 익은 토마토에 대한 코드를 진행하기 때문이다. 따라서 bfs로 재귀적으로 코드를 구성하고 문제를 푸니 rec..
https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 1. 접근 방법 이 문제는 '2667번 단지번호 붙이기'처럼 접근해서 재귀적으로 풀었더니 깊이 초과가 되어서, 다른 방식으로 접근했어야 했다. 우선 재귀적으로 접근하였던 코드는 다음과 같다. def setting(): m, n, k = map(int, input().split()) list_r = [[0 for _ in range(m)] for _ in range(n)] for i in range(k): x,..
https://www.acmicpc.net/problem/15650 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 1. 접근 방법 이번 문제는 DFS로 접근해야겠다는 냄새가 많이 나는 문제였다. def DFS(rows, m): if len(rows) == m: print(' '.join(map(str, rows))) return for i in range(1, n + 1, 1): if len(rows) == 0 or rows[-1] < i: rows.append(i) DFS(rows, m) n, m = ma..
https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다. www.acmicpc.net 1. 접근 방법 2중 리스트로 값을 저장하고, 해당 리스트 합을 구한다. 즉, 종이에 적혀 있는 수들의 합을 구한다. 만약 그 수가 length**2 혹은 0 이 아니면, 종이가 파란색만 혹은 하얀색만 가지고 있는 것이 아니게 되어버릴 것이기 때문에 잘라줘야 한다. 이후, 다시 재귀적으로 종이를 4등분 한 후, 각각의 정사각형을 함수에 넣는다. 이후 해당 종이의 sum이..