https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 문제 풀이 a, b를 입력받은 후 비교 메서드를 호출한다. 3*3으로 뒤집어주기 때문에 n-2, m-2 범위까지만 비교한다. 3*3 범위 중 (0, 0)가 달라서 뒤집어줄 때 나머지도 함께 뒤집히기 때문이다. 뒤집기 메서드를 호출할 때마다 count를 하나씩 올린다. 뒤집기 작업이 끝난 후에는 모든 행렬 요소를 비교한다. 이때는 n, m의 전체 범위를 기준으로 비교한다. 만약 한 개라도 다른 부분이 있다면 바로..
https://www.acmicpc.net/problem/21314 21314번: 민겸 수 민겸 수 하나가 주어진다. 민겸 수는 대문자 M과 K로만 이루어진 문자열이며, 길이는 3,000을 넘지 않는다. www.acmicpc.net 가장 큰 수를 구하는 방법 문자열을 하나씩 탐색하다가 K를 만나면 끊어준다. 만약 문자열이 K로 끝나지 않으면? K로 끊은 이후의 문자열은 하나의 M으로 취급해 준다. (예를 들어 KMKMM인 경우 K, MK, M, M) 가장 작은 수를 구하는 법 문자열을 하나씩 끊어준다. 단, M이 연속되는 경우는 묶어준다. (예를 들어 MKKMMK인 경우 M, K, K, MM, K) 정답 코드 import sys input = sys.stdin.readline strings = list..
https://www.acmicpc.net/problem/14719 14719번: 빗물 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치 www.acmicpc.net 해결 과정은 다음과 같다. 주어진 막대 길이들 중, 가장 긴 막대의 인덱스를 찾는다. 가장 긴 막대를 기준으로 오른쪽 그룹과 왼쪽 그룹으로 나누어 탐색한다. 가장 길이가 긴 막대의 인덱스까지 반복문을 돌린다. (오른쪽 그룹은 0에서 해당 인덱스까지, 왼쪽 그룹은 가로길이에서 해당 인덱스까지 역순으로) 오른쪽 그룹 기준으로, 가장 오른쪽 막대의 길이를 변수 right_height로..
https://www.acmicpc.net/problem/16918 16918번: 봄버맨 첫째 줄에 R, C, N (1 ≤ R, C, N ≤ 200)이 주어진다. 둘째 줄부터 R개의 줄에 격자판의 초기 상태가 주어진다. 빈 칸은 '.'로, 폭탄은 'O'로 주어진다. www.acmicpc.net 해당 문제에서 중요하게 봐야 할 부분이다. 폭탄과 인접한 칸도 함께 폭발한다. (상하좌우) 대신, "폭탄과 인접한 칸"과 인접한 칸은 폭발하지 않는다. 연쇄작용 X 폭탄이 있는 칸은 3초가 지난 후에 폭발한다. 시간 계산 반복문을 돌리면서 시간을 계산해 주어야 하는데 이 부분에서 꽤 헤맸다. 해결 방법은 다음과 같다. 1. 처음에 주어지는 봄버맨의 폭탄 설치 위치를 저장한다. 2. 해당 폭탄을 제외한 나머지 "."..
https://www.acmicpc.net/problem/16948 16948번: 데스 나이트 게임을 좋아하는 큐브러버는 체스에서 사용할 새로운 말 "데스 나이트"를 만들었다. 데스 나이트가 있는 곳이 (r, c)라면, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2), (r+2, c-1), (r+2, c+1)로 이동할 수 있다. 크 www.acmicpc.net 이 문제는 데스 나이트가 (r1, c1)에서 (r2, c2)로 이동하는 최소 이동 횟수를 구하는 것이다. 전형적인 bfs 문제로, 주어진 방향을 탐색하며 횟수를 더해가면 된다. 다른 bfs 문제와의 차별점을 찾자면 일반적인 상하좌우가 아니라, (r-2, c-1), (r-2, c+1), (r, c-2), (r, c+2),..
https://www.acmicpc.net/problem/3184 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net "우리의 양은 늑대에게 싸움을 걸 수 있고 영역 안의 양의 수가 늑대의 수보다 많다면 이기고, 늑대를 우리에서 쫓아낸다. 그렇지 않다면 늑대가 그 지역 안의 모든 양을 먹는다." 이 문장을 중심으로 풀어나가면 된다. 일반적으로 탐색만 하는 BFS 문제와 달리 이 문제는 마당 안에 있는 양과 늑대의 수를 상황에 따라 줄여주면서 탐색해야 한다. 즉, 탐색하는 과정에서 양과 늑대의 수를 저..
https://www.acmicpc.net/problem/14940 14940번: 쉬운 최단거리 지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이 www.acmicpc.net 출력 요구사항을 잘 보면 원래 갈 수 없는 땅인 위치는 0으로 출력하고, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다. 라고 나와있다. 즉, 목표지점과 0인 부분은 0으로 출력하고, 1이었으나 도달하지 못한 경우에만 -1로 출력하면 된다. 처음에 0인 부분도 -1로 출력해서 틀렸다. 문제 해결 방법은 아래와 같다. 최단거리..
https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net 재민이와 재현이의 역할을 잘 파악하면 된다. 재민 : 장부 관리 재현 : 잘못된 수를 외침 → 이로 인해 재민이는 가장 최근에 쓴 수를 지움 문제 해결 방법 재현이가 0을 외치면 스택 마지막 요소를 삭제한다. 0을 외치지 않으면 제대로 부른 것이니, 해당 숫자를 스택에 추가한다. 소스 코드 import sys input = sys.stdin.readline N =..