https://www.acmicpc.net/problem/1080 1080번: 행렬 첫째 줄에 행렬의 크기 N M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 행렬 A가 주어지고, 그 다음줄부터 N개의 줄에는 행렬 B가 주어진다. www.acmicpc.net 해설 : 0과 1로만 이루어진 행렬 A와 B가 주어질 때 A를 B로 변환시키기 위해 A를 몇 번 뒤집어야 하는지 찾는 문제이다. A를 뒤집는다는 것은, A의 3x3 만큼의 크기를 뒤집는다는 것이다, (1이면 0으로, 0이면 1로) 풀이 : A의 (0,0)부터 (N-2,N-2) 까지 탐색하며 B와 다른 원소를 만난다면 3x3만큼 뒤집어주면 된다., 즉, 현재 내 위치의 값만 비교하여 다르다면 뒤집어주는 방법이므로..
https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을 www.acmicpc.net 해설 : 2^n x 2^n의 형태로 존재하는 배열을 Z모양으로 탐색하려 한다. 이 때, r행 c열을 몇 번째로 탐색하는지 찾는 문제이다. 풀이 : Z모양으로 탐색하는 것을 재귀로 구현하였다. 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래의 순으로 재귀를 호출하여 각 원소에 인덱스를 삽입하게 된다. r행 c열을 만난다면 그 때의 ans값을 출력한다. 소스코드 : 12345678910111..
https://www.acmicpc.net/problem/1052 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번 www.acmicpc.net 해설 : N개의 물병과 K라는 수가 주어진다. N개의 물병에는 모두 물이 1리터씩 들어있고 같은 양이 들어있는 물병 두 개를 합쳐서 하나의 물병에다 옮길 수 있다. 물병의 개수를 K개로 줄이려고 할 때, 불가능한 경우가 생기지 않게 상점에서 적절하게 물병을 사려고 한다. 이 때, 물병을 사는 최소 개수를 찾는 문제이다. 상점에서 사는 물병엔 물이 1리터씩 들어있다. 풀이 : 한 번 연산할 때 물병의 개..
https://www.acmicpc.net/problem/1049 1049번: 기타줄 첫째 줄에 N과 M이 주어진다. N은 100보다 작거나 같은 자연수이고, M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에는 각 브랜드의 패키지 가격과 낱개의 가격이 공백으로 구분하여 주 www.acmicpc.net 해설 : 기타리스트 강토가 기타줄을 갈려고 한다. 갈아야 할 기타줄의 수 N과 가격을 찾아본 브랜드 M이 주어지고, 브랜드 별 패키지(기타줄 6개 묶음) 의 가격과 낱개의 가격이 주어진다. 이 때, 기타줄을 가는데 드는 최소 비용을 찾는 문제이다. 풀이 : 그리디 알고리즘을 사용하는 쉬운 문제이다. 낱개의 가격이 가장 싼 브랜드와, 묶음의 가격이 가장 싼 브랜드를 찾고 낱개 * (사야하는 기타..
https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 해설 : 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 과장해서 말한다. 당연히 과장해서 이야기하는 것이 훨씬 더 재미있기 때문에, 되도록이면 과장해서 이야기하려고 한다. 하지만, 지민이는 거짓말쟁이로 알려지기는 싫어한다. 문제는 몇몇 사람들은 그 이야기의 진실을 안다..
https://www.acmicpc.net/problem/1041 1041번: 주사위 첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수 www.acmicpc.net 해설 : +---+ | D | +---+---+---+---+ | E | A | B | F | +---+---+---+---+ | C | +---+ 전개도가 다음과 같은 주사위의 A부터 F까지의 수가 주어지고 이를 N x N x N 개 쌓아서 정육면체를 만든다고 할 때, 바깥에 드러나는 5개의 면들에 있는 숫자들의 합의 최솟값을 찾는 문제이다. 풀이 : 수학에 많이 약한 내..
https://www.acmicpc.net/problem/1038 1038번: 감소하는 수 음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를 www.acmicpc.net 해설 : 음이 아닌 정수 X가 가장 큰 자릿수부터 가장 작은 자릿수까지 감소한다면 (숫자가 작아진다면) 이는 감소하는 수 이다. N이 주어질 때 0부터 시작하는 감소하는 수들 중 N번째 수를 출력하는 문제이다 (숫자는 1,000,000) 이하이다. 풀이 : 완전 탐색 문제이다. N번째 수인지 확인하는 cnt 변수를 두고, 이 cnt 변수가 N보다 작은동안 1부터 1,000,000까지..
https://www.acmicpc.net/problem/1026 해설 : 숫자가 담겨있는 A와 B 배열이 주어질 때 A[0] * B[0] + A[1] * B[1] + ...... + A[n-1] * B[n-1] 의 최솟값을 구하는 문제이다. 단, B정렬은 재배열할 수 없다는 조건이 있다. 풀이 : A배열과 B배열을 한 쪽은 오름차순, 한 쪽은 내림차순으로 정렬한 후 0번 인덱스부터 n-1번 인덱스까지 더해주면 되는 문제인데 B배열을 정렬할 수 없다는 조건이 있다. Python의 min과 max 함수를 이용하여 각 배열의 최솟값과 최댓값을 곱해준 뒤 답에 더해준다. 이후 배열에서 방금 사용한 값을 삭제해주는 식으로 구현하였다. 1 2 3 4 5 6 7 8 9 10 11 12 n = int(input())..
스택(Stack) 스택이란 ? 스택(Stack)은 순서대로 쌓여진 데이터를 의미힙나다. 스택은 한 쪽으로만 데이터의 입·출력이 동작하는 자료구조입니다. 기본적으로 FILO(First In Last Out)의 동작방식을 가지며 이는 말 그대로 먼저 들어간 요소가 가장 마지막에 꺼내진다는 것입니다. 메모리에서 함수 호출 시 변수, 리턴값 등의 데이터를 저장하는 공간입니다. 데이터를 넣는 것은 push(), 빼는 것은 pop()이라고 합니다. 스택의 구조 스택에 먼저 저장하는 데이터는 스택의 가장 아래쪽(높은 주솟값)부터 쌓이고 나중에 저장되는 데이터는 그 위로 쌓입니다. 스택의 동작방식을 그림으로 나타내보겠습니다. 기본적으로 스택의 구조는 이런식으로 생겼습니다. 다음은 스택에 A, B, C를 넣고 다시 빼는..