본문 바로가기

728x90
반응형

전체 글

(163)
[Python] 백준 11051번 문제, 이항 계수 2 https://www.acmicpc.net/problem/11051 11051번: 이항 계수 2 첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\)) www.acmicpc.net N과 K를 입력 받아 nCk의 결과를 출력하는 문제이다. nCk는 n! / k!(n-k)!이다. (N과 K의 범위는 문제 참고) 그런데 N!, K!, (N-K)!를 구할 때 중복된 계산이 많기 때문에 비효율적이다. 그렇기 때문에 동적 프로그래밍을 이용한다면 효율적으로 계산할 수 있다. 나는 dp를 만들고 인덱스에 해당 팩토리얼 결과값을 넣었다. 예로 1번째 인덱스, 2번째 인덱스, 그리고 3번째 인덱스 값이 순서대로 1, 2, 6인데 3번째 인덱스 값을 구할 때, 1..
[Python] 백준 14502번 문제, 연구소 https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net 연구소 정보(0: 빈 칸, 1: 벽, 2: 바이러스)가 주어지고 벽을 세 개 세웠을 때, 바이러스가 없는 안전한 빈 칸의 갯수를 구하는 문제이다. 브루트포스 알고리즘이기 때문에 벽을 세 개 놓을 수 있는 모든 경우를 돌며 BFS를 통해 바이러스를 전파시킨 다음에 전파가 끝난 다음에 빈 칸의 갯수를 세어 최대값만을 구한다. 벽을 세 개 놓을 수 있는 모든 경우는 [0][j]부터 [N-1][M-1]까지 탐색하면서..
[Python] 백준 1932번 문제, 정수 삼각형 https://www.acmicpc.net/problem/1932 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net 정수 삼각형이 있는데 맨 위층에러 아래층까지 내려왔을 때 가장 큰 합이 되는 경로를 구하는 문제이다. 현재층으로 오기 위한 방법으로는 바로 대각선 대각선 위층이거나 오른쪽 대각선 위층이어야 한다. 따라서 삼각형을 리스트 형식으로 만들었을 때, 대각선 왼쪽 위층은 왼쪽 위층과 같고 오른쪽 대각선 위층은 윗층이 된다. 즉, dp[i][j]에서 왼쪽은 [i-1][j-1], 오른쪽은 바로 위층이라고 했기 때문에 [i-1][j]이다. 단, 층에서 맨 왼쪽은 대각선 왼쪽이 없기 ..
[Python] 백준 9663번 문제, N-Queen https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net N-Queen 문제는 위 그림과 같이 2차원 리스트를 사용해서 마지막 행까지 정상적으로 퀸이 놓여진다면 count++를 하고, 그렇지 않다면 다음 경우를 실행한다. 2차원 리스트로 사용해 하나씩 조건을 따진다면 코드가 복잡해질 것 같아 찾아보던 중에 1차원 리스트에서 인덱스 번호를 행으로, 인덱스 값을 열로 지정해 사용할 수 있었다. 그래서 위 그림과 같이 표현할 수 있다. 그럼 여기서 문제가 발생하는데 좌우로는..
[Python] 백준 14651번 문제, 걷다보니 신척역 삼(Large) https://www.acmicpc.net/problem/14651 14651번: 걷다보니 신천역 삼 (Large) 욱제는 ‘삼’이란 음절을 참 좋아한다. 인삼, 홍삼, 해삼, 삼성, 이춘삼(李春森), 삼식이, 삼시세끼, ㄴㄴ 그거 안 삼, 삼과 죽음, 알았삼, 걷다보니 신천역 삼, 그리고 특히 일이삼을 좋아한다. www.acmicpc.net 1부터 N자리까지의 1, 2, 0으로 구성된 3의 배수를 하나씩 구한다면, 실행 시간이 너무 길어 시간 초과가 뜰 것이다. 하나씩 다 구하면 시간 초과가 발생하기 때문에 뭔가 수학적 규칙을 찾아야한다. 수학적 규칙을 찾기 위해 조건에 맞는 낮은 자릿수를 직접 적어보자. N Result 1 0 2 2 3 6 4 18 5 54 이렇게 누적합이 생기는데 N자릿수의 값은 ..
[Python] 백준 2636번 문제, 치즈 https://www.acmicpc.net/problem/2636 2636번: 치즈 아래 과 같이 정사각형 칸들로 이루어진 사각형 모양의 판이 있고, 그 위에 얇은 치즈(회색으로 표시된 부분)가 놓여 있다. 판의 가장자리(에서 네모 칸에 X친 부분)에는 치즈가 놓 www.acmicpc.net 이 문제는 너비우선탐색을 이용한 시뮬레이션 문제이다. 보드판 위에 치즈가 있을 때, 치즈는 1개의 블록의 집합으로 이루어져있는데 1시간마다 치즈의 겉테두리이 녹는다. 즉, 치즈의 테두리가 1시간마다 사라진다는 것이다. 치즈 중간이 비어있어도 겉테두리와 연결되어 있지 않다면 녹지 않으며, 무조건 겉테두리만 1시간에 한 번씩 녹는다. 그래서 너비우선탐색으로 치즈의 겉테두리를 찾아낸 다음에 겉테두리 값을 1(치즈)에서 0..
[Python] 백준 5430번 문제, AC https://www.acmicpc.net/problem/5430 5430번: AC 각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다. www.acmicpc.net 선영이가 새로운 언어인 AC를 만들었는데 R과 D라는 메소드만 가지고 있다고 한다. R은 배열에 있는 숫자를 뒤집는 메소드이며, D는 첫번째 숫자를 삭제하는 메소드이다. 데큐를 이용하면 쉽게 문제를 풀 수 있다. D에 의해 삭제 되는 첫번째 숫자를 on_left를 통해 pop()을 할 지, popleft()를 할 지 결정한다. 그래서 현재 실행 메소드가 R이라면 on_left 상태를 변경해 D가 첫번째 숫자를 삭제할 수 있도록 한다. 그리고 error가..
[Python] 백준 14499번 문제, 주사위 굴리기 https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 시뮬레이션 문제를 풀 때는 머리로 생각만 하기 보다는 그림을 직접 그려가며 풀면 해답에 쉽게 다가갈 수 있는 것 같다. 우선 문제에서 주사위 전개도를 그림 1과 같이 정의를 했지만, 직접 그려서 풀다 보면 저 형태가 불편하다. 그림 1은 윗면을 기준으로 풀어진 전개도이지만, 나는 바닥면을 기준으로 풀어진 전개도를 가지고 문제를 풀었..

728x90
반응형