분류 전체보기(42)
-
[백준] 14502번 : 연구소
접근법 - 전에 올렸던 "토마토"와 매우 유사한 문제라 개념을 확실히 쌓고자 풀어보았다. - "토마토" 문제와 유사하게 전염이 되는 형식을 사용하였기에 dfs를 채택하였다. 그런데 특이점으로 "1"이라는 방벽 3개를 사용자가 임의로 설정해야한다는 점이 달랐다. - 행과 열의 범위를 계산해보니 최대 8 * 8이어서 combination으로 1을 놓을 수 있는 조합을 모두 찾아낸 후 하나씩 적용해가면서 최댓값을 비교해야겠다는 생각을 했다. - zero_count() 함수를 정의해서 행렬 내의 안전 구역(0인 곳)의 갯수를 반환하도록 하였고, shallow_copy() 함수를 정의하여 matrix를 visit에 복사하도록 했다. 이 때 [i, j]가 combi 즉, 사용자가 놓을 3개의 방벽 조합에 해당하는 ..
2021.04.23 -
[백준] 7576번 : 토마토
접근법 - 일반적인 dfs 방식으로 풀어보려다가 내가 잘못한 건지 몰라도 재귀를 돌리다 보니 원하는 결과 값을 얻질 못해서 bfs 방식으로 접근을 했다. - queue를 만들고 matrix에서 1인 부분을 queue에 넣어준다. - queue에서 가장 앞에 있는 것을 빼서 row(행), col(열)에 저장을 한다. - 현재 픽셀을 기준으로 상, 하, 좌, 우에 visit[n_row][n_col]이 0이고, matrix[n_row][n_col]이 -1이 아니라면 그 픽셀을 현재 방문하고 있는 픽셀의 값 + 1을 넣어준다.(하루가 지나갔기 때문에 + 1) 그 후 그 픽셀 이후 값들을 검사하기 위해 [n_row, n_col]을 queue에 넣어준다. - 위의 경우 행이 0보다 작거나 전체 row크기보다 커지면..
2021.04.23 -
[백준] 10844번 : 쉬운 계단 수
접근법 - 배열의 사이즈를 10 X 101(i = 0인 배열은 편의 상 안 쓰기 위해 101로 만듦)로 만들었다. - 예제 입력 1번을 위해 l[1][0]을 제외한 l의 1행에 1 값을 넣어주었다.(l[1][0]은 0으로 시작하는 수는 없기 때문에 0으로 설정) - l[2]부터는 이전 배열의 값들을 참고하여 넣는다. - l[i][0]의 경우 l[i][1]의 경우 밖에 생길 수 없으므로 l[i][j] = l[i - 1][j + 1]을 적용한다. - l[i][9]의 경우 l[i][8]의 경우 밖에 생길 수 없으므로 l[i][j] = l[i - 1][j - 1]을 적용한다. - 그 외의 경우에는 자신보다 작은 값에서 1개, 큰 값에서 1개기 때문에 l[i][j] = l[i - 1][j - 1] + l[i - ..
2021.04.22 -
[백준] 1932번 : 정수 삼각형
접근법 - 결과를 도출해 내기 위해서는 삼각형의 맨 밑에 있는 수들의 각 값을 알아야겠다고 생각했다. 각 값들을 구하려면 값으 좌상 혹은 우상 중 더 큰 값을 자신의 값과 더해야한다. 그렇기 때문에 삼각형의 모든 노드에서 최선의 값을 구하려고 했다. - 일단 좌변과 우변은 고를 것 없이 자신의 상위 노드(좌변일 경우 triangle[i - 1][j], 우변일 경우 triangle[i - 1][j - 1])와 자신을 더한 값이 최선의 값이다. - 그 외의 경우 자신을 기준으로 좌상의 값과 우상의 값 중 더 큰 값을 자신과 더하고 이 값을 triangle[i][j]에 저장한다. - 맨 밑 변에서 max값을 출력한다. 풀이 N = int(input()) triangle = list() for _ in rang..
2021.04.21 -
[백준] 9461번 : 파도반 수열
접근법 - 나선 모양 중에서 반복이 되는 1과 2를 뛰어넘고 3부터 규칙을 찾아보았다. - 3을 기준으로 맨 처음의 값(P[1], 편의 상 P[0]는 건너뛰고 1부터 시작했다.)과 맨 마지막 값(P[3 - 1])을 더하니 3이 나오는 것을 알 수 있었다. - 그 다음 값인 4는 P[2]와 P[4 - 1], 5는 P[3]와 P[5 - 1] 이런 규칙이 있다는 것을 알 수 있었다. - start_idx를 1로 설정하고 3의 인덱스인 6부터 N의 최댓값인 100까지의 for문을 돌면서 P[i]의 값을 구하고 start_idx를 1씩 올려주며 값을 계산했다. - 다 풀고 다른 분들은 어떻게 풀었나 봤더니 P[i + 3] = P[i] + P[i + 1] 규칙을 이용해서 풀었다. 풀이 # 백준 9461번 : 파도반..
2021.04.21 -
[백준] 2579번 : 계단 오르기
접근법 - 문제를 처음에 잘못 이해를 해서 첫 번째 계단을 무조건 밟아야 된다고 생각을 했다. 하지만 2칸 점프가 가능하니 N=3인 경우 2, 3번 계단만 밟아도 된다는 것을 인지했다. - 입력받은 값들을 val이라는 리스트에 넣어주고, 계단이 1층인 경우(N = 1) val[0]의 값을 stare에 넣어준다. stare은 2중 배열로 두 번째 값은(stare[1][1]) 현재 연속된 계단이 몇 개인지를 기록하는 지표이다. - 계단의 값이 2인 경우 stare[1][0]의 값과 val[1]의 값을 더해준 값을 기록하고 1, 2 계단이 연속되고 있기 때문에 stare[2][1] = 2가 된다. - 계단이 3개 이상인 경우 부터 분류를 시켜주는데 크게 두 가지로 분류했다. 1. 이전 계단이 연속된 상태인 경..
2021.04.20