구현이란 말 그대로 소스코드를 구현해 내는 것이다. 즉, 문제를 읽고 해석하고 그에 따른 알고리즘을 소스코드로 바꾸는 과정이라고 할 수 있는 것이다. 흔히 문제 해결 분야에서 구현 유형의 문제를 '풀이를 떠올리는 것은 쉽지만 소스코드로 옮기는 것은 어려운 유형' 이라고 일컫는다. 그러한 이유는 대부분 아래와 같다.
- 사소한 조건 설정이 많은 문제인 경우
- 프로그래밍 문법을 정확하게 숙지하지 못한 경우
- 라이브러리 사용 경험이 부족한 경우
이러한 경우들을 사전에 방지하기 위해서 구현 유형의 다양한 문제를 풀어봐야 할 것이다. 이 책에서는 완전 탐색, 시뮬레이션 유형을 모두 구현 유형으로 묶는다. 먼저 완전 탐색이란 모든 경우의 수를 시행해보는 방법이고, 시뮬레이션은 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행하는 방법이다.
메모리 제약 사항에 대해서 얘기해보자. 파이썬에서는 다른 언어에 비해 구현상의 복잡함은 적지만 메모리 제한은 고려해야 할 것이다. 데이터 입력량 혹은 처리량이 많은 문제에서는 반드시 메모리 제한을 고려해야 한다. 파이썬에서의 리스트의 길이에 따른 메모리 사용량은 C/C++과는 대략 동일하며 크기가 1,000만 이상인 리스트는 약 40MB를 차지한다는 것을 기억하자. 따라서 문제에 표기된 메모리 제한보다 적은 메모리를 사용해야 할 것이다.
동작 속도 관점에서는 아래와 같이 단순하게 기억하면 될 것이다.
- 파이썬 : 대략 1초에 2000만 번 연산
- pypy3 : 대략 1초에 2000만 번 ~ 1억 번 연산
따라서 코딩테스트에서 pypy3를 선택한다면 파이썬3와 동일한 코드를 제출한다고 하더라도 실행 시간을 현격히 줄일 수 있을 것이다.
예제 4.1) 상하좌우
문제) N x N 크기의 정사각형 공간 ( 가장 왼쪽 위 좌표는 (1,1) / 가장 오른쪽 아래 좌표는 (N, N) ) 이 주어진다. 시작 좌표는 항상 (1, 1) 이며 상하좌우 방향으로 움직일 수 있다. 여행가는 시작 좌표에서 출발하며 여행가가 이동할 계획이 적힌 계획서에는 다음과 같이 쓰여있다.
하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀있다. 각 문자의 의미는 아래와 같다.
L : 왼쪽으로 한 칸 이동
R : 오른쪽으로 한 칸 이동
U : 위로 한 칸 이동
D : 아래로 한 칸 이동
이 때 여행가가 N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 계획서 상의 명령에 따라서 여행가가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
입력 조건)
첫 째 줄에 공간의 크기를 나타내는 N이 주어진다. ( 1 ≤ N ≤ 100)
둘 째 줄에 여행가가 이동할 계획서 내용이 주어진다. ( 1 ≤ 이동 횟수 ≤ 100 )
출력 조건)
첫 째 줄에 여행가가 최종적으로 도착할 지점의 좌표 (X, Y)를 공백을 구분하여 출력한다.
입력 예시)
5
R R R U D D
출력 예시)
3 4
소스코드
예제 4.2) 시각
문제) 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오. 예를 들어 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각이다.
00시 00분 03초
00시 13분 30초
반면에 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각이다.
00시 02분 55초
01시 27분 45초
입력 조건)
첫 째 줄에 정수 N이 입력된다. ( 0 ≤ N ≤ 23)
출력 조건)
00시 00분 00초 부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다.
입력 예시)
5
출력 예시)
11475
소스코드
'Algorithm' 카테고리의 다른 글
구현 (Implementation) (3) - 실전문제 4.3) 게임 개발 (0) | 2023.07.29 |
---|---|
구현 (Implementation) (2) - 실전문제 4.2) 왕실의 나이트 (0) | 2023.07.29 |
그리디 (Greedy) (4) - 실전문제 3.4) 1이 될 때까지 (0) | 2023.07.22 |
그리디 (Greedy) (3) - 실전문제 3.3) 숫자 카드 게임 (0) | 2023.07.22 |
그리디 (Greedy) (2) - 실전문제 3.2) 큰 수의 법칙 (0) | 2023.07.22 |