
https://www.acmicpc.net/problem/21610 21610번: 마법사 상어와 비바라기 마법사 상어는 파이어볼, 토네이도, 파이어스톰, 물복사버그 마법을 할 수 있다. 오늘 새로 배운 마법은 비바라기이다. 비바라기를 시전하면 하늘에 비구름을 만들 수 있다. 오늘은 비바라기 www.acmicpc.net 1. 접근 방식 문제를 읽으면서 필요한 함수를 미리 주석으로 기록해놓자 구현 문제이다. 지문이 길기 때문에 문제를 읽으면서 이전 내용이 휘발될 수 있다. 따라서 먼저 주석으로 어떤 역할을 하는 함수가 필요한지 작성해 놓았다. 나중에 문제를 풀 때 길을 잃지 않는 데 도움이 됐다. 또한 지문을 읽으며 필요한 함수들을 미리 정의했기 때문에 이후 구현은 간단하다. 문제를 이해하는 게 관건인 문제..

https://www.acmicpc.net/problem/21608 21608번: 상어 초등학교 상어 초등학교에는 교실이 하나 있고, 교실은 N×N 크기의 격자로 나타낼 수 있다. 학교에 다니는 학생의 수는 N2명이다. 오늘은 모든 학생의 자리를 정하는 날이다. 학생은 1번부터 N2번까지 번호 www.acmicpc.net 1. 접근 방식 딕셔너리를 적극 사용하자 학생이 좋아하는 학생들을 담는 survey 딕셔너리, (딕셔너리는 순서가 없으므로) 학생이 입력된 순서를 저장하는 order 딕셔너리, 학생이 앉은 최종 자리를 담는 decided 딕셔너리를 만들었다. 첫 번째 조건: 학생이 좋아하는 학생들과 인접한 칸을 찾는다. 좋아하는 학생이 앉은 위치를 찾을 때 '학생이 앉은 최종 자리를 담는 decided..

https://www.acmicpc.net/problem/16926 16926번: 배열 돌리기 1 크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5] www.acmicpc.net 1. 접근 방식 deque()를 사용해서 배열을 line으로 접근하자. 위 그림처럼 배열을 line으로 접근한다. 사각형 한 줄이 하나의 line인 것이다. line을 만들기 위해서는 인덱스 처리를 통해 for문으로 배열을 색깔별로 접근하면 된다. 하나의 라인을 만들기 위해 4개의 방향으로 접근한다. 각..

https://www.acmicpc.net/problem/16935 16935번: 배열 돌리기 3 크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 → www.acmicpc.net 1. 접근 방식 각 연산을 처리하는 함수를 구현하자. 각 함수는 인자로 기존 배열을 받고, 연산을 적용한 결과(배열)을 반환한다. 함수 내부에서 일어나는 일이 외부에 영향을 끼치고 싶지 않았기 때문에 이와 같이 배열을 인자로 받고, 새 배열을 반환하는 방식으로 구현하고자 한다. 인덱싱과 리스트 comprehension을 ..

https://www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 1. 접근 방식 이동할 때의 핵심은 「격자의 행과 열은 1번부터 N번까지 번호가 매겨져 있고, 1번 행은 N번과 연결되어 있고, 1번 열은 N번 열과 연결되어 있다.」이다. 예를 들어 파이어볼로 (4, 1, 2, 5, 7)을 입력 받았다면, 실제 테이블의 3행 0열에 해당 파이어볼이 존재하는 것이다. 속도 5, 방향 7.즉, 좌측 상향 대각선으로 5칸 이동해..

https://www.acmicpc.net/problem/1913 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 1. 접근 방식 빈 표에서 바깥쪽부터 숫자를 채워나가자. 목표는 위 그림의 왼쪽 초기 표 상태에서 오른쪽 표 상태로 만드는 것이다. 이를 위해서 왼쪽, 아래쪽, 오른쪽, 위쪽으로 4번에 나눠 값을 채워 넣는다. 처음에는 (0, 0)에 n² = 25를 넣는 것으로, 왼쪽부터 값을 채워 넣는다. 이때 열 j는 0으로 고정되어 있고, 행 i만 0에서 (n - 1) = 4까지 증가한다. 아래쪽은 행 i가 ..

17413번: 단어 뒤집기 2 문자열 S가 주어졌을 때, 이 문자열에서 단어만 뒤집으려고 한다. 먼저, 문자열 S는 아래와과 같은 규칙을 지킨다. 알파벳 소문자('a'-'z'), 숫자('0'-'9'), 공백(' '), 특수 문자('')로만 이루어져 www.acmicpc.net 1. 문제 내용 2. 접근 방식 머리속에서 문제 푸는 과정을 그대로 코드로 옮기자. 문자열을 처음부터 끝까지 순회하면서 ''가 나올 때, ' '(공백)이 나올 때를 구분해야겠다고 생각했다. < : 태그의 시작 따라서 만약 이전에 단어가 존재한다면, 그것을 뒤집어서 result 변수에 미리 넣어준다. 그 후에, 다시 새롭게 word를 '

2477번: 참외밭 첫 번째 줄에 1m2의 넓이에 자라는 참외의 개수를 나타내는 양의 정수 K (1 ≤ K ≤ 20)가 주어진다. 참외밭을 나타내는 육각형의 임의의 한 꼭짓점에서 출발하여 반시계방향으로 둘레를 돌면서 지 www.acmicpc.net 1. 문제 내용 2. 접근 방식 육각형을 두 덩어리로 쪼개 각각 넓이를 구하자. 1번째와 2번째로 입력받은 사격형의 넓이와 4번째와 5번째로 입력받은 사각형 넓이를 각각 구한다. 그러면 처음에 입력받기 시작하는 임의의 꼭짓점 위치에 따라서 위 그림처럼 2가지 방법으로 육각형이 쪼개진다. 각 덩어리의 넓이를 더할 때와 뺄 때를 구분하기 위해 가장 긴 가로와 세로을 가진 사각형의 넓이를 구하자. 위 그림에서 1번째 케이스는 두 사각형을 합해야 하지만, 2번째 케이..

https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 1. 문제 내용 2. 접근 방식 입력되는 정수의 개수가 최대 50만이므로, 최대한 입력 받은 정수 리스트 순회를 줄이자. 이에, 정수를 입력받을 때 산술평균을 위한 sum 계산과 최빈값을 위한 각 수의 카운팅을 수행한다. 입력 받은 정수 리스트를 정렬하는 것은 불가피하므로, 인덱싱을 활용하자. 중앙값을 구하려면 리스트를 오름차순 정렬해야 한다. 그리고 이를 중앙값 뿐만 아니라, 범위를 구할 때도 활용하자. mi..

1966번: 프린터 큐 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 www.acmicpc.net 1. 문제 내용 2. 접근 방식 문제에 언급된 조건을 그대로 구현하자. 현재 문서는 0번째이고, 이것보다 중요도가 높은 문서가 있는지 확인하기 위해 max( ) 내장함수를 사용하여 값을 비교한다. 만약 0번째보다 더 큰 중요도를 가진 문서가 있다면, 0번째 문서를 pop( )하고 큐의 맨 뒤에 추가한다. 실행 순서를 카운팅하기 위해 타겟 문서의 인덱스 m을 추적하자. 현재 문서보다 중요도가 높은 문서가 있어서 큐의 맨 뒤로 이동하든, 현재 문서가 프린트되든 타겟 문..