문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 테이블 위에 N, S극의 성질을 뛰는 자성체가 있을 때 자기장을 가할 경우 N, S극이 만나 더 이상 움직이지 못하는 교착상태가 되는 경우를 반환하는 문제이다. 처음에 문제를 접하였을 때는 N극 S극의 영향을 모두 주어 변화시켜야 한다고 생각하였는데 다시 생각해보면, N극 S극 중 하나만 영향을 받는다고 생각하고 이동을 시키면 된다. 예를 들어 S극에 이끌리는 N극 자성체를 이동하고자 하면, 아무것도 없는 경우 이동하고 S극인 자석과 만나는 경우 `교착상태`가 된다. 코드 EMPTY, N, S = 0, 1, 2 for test_case in ran..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 행열의 가로 세로의 문자열을 입력된 길이만큼 split 하여 회문이 되는지 확인하고 가능한 경우를 반환하는 문제이다. 회문이 되기 위해서는 `string == string[::-1]`을 만족하면 된다. 세로 탐색을 쉽게 하기 위해 앞서 다룬 Sum 문제와 같이 행열을 전치하여 문제를 풀었다. 코드 for test_case in range(1, 11): answer = 0 length = int(input()) array = [list(input().strip()) for _ in range(8)] trans_array = list(map(list,..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 위의 그림과 같이 행렬의 모든 합을 구하고, 최대 값을 반환하는 문제이다. 이는 파이썬의 경우 간단하게 해결할 수 있다. trans_array = list(map(list, zip(*array))) 위의 행렬을 `numpy`를 사용하지 않고 전치하기 위해서는 위와 같이 전치할 수 있다. 따라서 전치시키게 되면 행렬을 합을 보다 편하게 구할 수 있다. # ↘ 대각선의 합 left_right = sum([array[i][i] for i in range(100)]) # ↙ 대각선의 합 right_left = sum([array[i][99 - i] for..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 상자의 높낮이가 주어질 때, 가장 높은 곳에 있는 상자를 가장 낮은 곳에 있는 상자에 옮겨 평탄화를 하는 문제이다. 문제에서 평탄화를 하기 횟수(dump)가 주어질 때, 평탄화 후 가장 높은 곳의 위치와 가장 낮은 곳의 위치의 차를 반환하면 된다. 코드 for test_case in range(1, 11): dump = int(input()) box = list(map(int, input().split())) for _ in range(dump): box[box.index(max(box))] -= 1 box[box.index(min(box))] +..
문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 풀이 빌딩의 높낮이가 주어질 때, 하나의 빌딩을 기준으로 좌측으로 2칸, 우측으로 2칸의 빌딩 중 낮은 빌딩이 있는 경우를 찾는 문제이다. 이때 빌딩의 높이가 좌우측의 빌딩 중 가장 높은 빌딩보다 높은 층은 전망권이 확보된 세대수이다. 주어진 입력값에서 전망권이 확보된 세대수를 반환하면 된다. 코드 for test_case in range(1, 11): length = int(input()) buildings = list(map(int, input().split())) answer = 0 for idx in range(2, length - 2): cur..
문제 2579번: 계단 오르기 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점 www.acmicpc.net 문제 풀이 계단 아래 시작점부터 꼭대기에 위치한 도착점까지 도착하고자 한다. 각 계단에는 획득할 수 있는 점수가 있으며, 계단을 밟을 수 있는 규칙이 존재한다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안된다. 마지막 도착 계단은 반드시 밟아야 한다. 따라서 이 문제는 경우의 수를 뻗어 가능한 경우 중 가장 큰 수를 찾는 문제와 같다. 계단의 개수가 300개 이하이므로 `DFS`로 풀게 될 경우 당연히 시간 초과가..
문제 16637번: 괄호 추가하기 첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가 www.acmicpc.net 문제 풀이 수식이 주어질 때, 괄호를 추가하여 최대가 되는 수를 반환하는 문제이다. 괄호를 추가하기 위해서는 2가지 방법이 있을 수 있다. 예를 들어 예제 입력 1의 경우 `3 + 8 * 7 - 9 * 2`를 괄호를 추가할 수 있는 경우를 `DFS`로 탐색하는 방법은 다음과 같다. 두수 사이에 하나의 연산자 기호가 있어야 한다. `(3 + 8) * 7 - 9 * 2`와 같이 가장 앞의 연산자부터 우선 처리한다. `3 + (8 * 7) - 9 ..
문제 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 문제 풀이 집에서 학교까지 가는 길은 MxN 일 때, 폭우로 인해 갈 수 없는 길이 있다. 이때, 등교를 할 수 있는 경우의 수를 반환하는 문제이다. 문제는 x, y에 따른 2차원 배열을 생성하여 방문하는 경로를 기록하는 방식으로 풀 수 있다. 기존의 그래프에서 위의 그림과 같이 0을 추가한 DP 배열을 초기화한다. 그리고 처음 출발점인 집을 1로 초기화한 후 점화식인 `dp[x][y] = dp[x - 1][y] + dp[x][y - 1]`을 각..