풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 지칭
예시
프로그래밍에서의 좌표계는 일반적인 대수학에서의 좌표계와 다른 의미를 가질 때가 많습니다.
완전 탐색 문제에서는 2차원 공간에서의 방향 벡터가 자주 활용됩니다.
# 동, 북, 서, 남
dx = [0, -1, 0, 1]
dy = [1, 0, -1, 0]
# 현재 위치
x, y = 2, 2
# 다음 위치
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
print(nx, ny)
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시작 중에서
3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하세요.예를 들어, 1을 입력했을 때 다음은 3이 하나라도 포함되어 있으므로 세어야 하는 시각입니다.
- 00시 00분 03초
- 00시 13분 30초
반면에, 다음은 3이 하나도 포함되어 있지 않으므로 세면 안 되는 시각입니다.
- 00시 02분 55초
- 01시 27분 45초
def solution(N):
answer = 0
for i in range(N + 1):
for j in range(60):
for k in range(60):
if '3' in str(i) + str(j) + str(k):
answer += 1
return answer
여행가 A는 N x N 크기의 정사각형 공간 위에 서있습니다.
이 공간은 1 x 1 크기의 정사각형으로 나누어져 있습니다.
가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당합니다.
여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)입니다.
우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있습니다.계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있습니다.
각 문자의 의미는 다음과 같습니다.
- L : 왼쪽으로 한 칸 이동
- R : 오른쪽으로 한 칸 이동
- U : 위로 한 칸 이동
- D : 아래로 한 칸 이동
이때 여행가 A가 N x N 크기의 정사각형 공간을 벗어나는 움직임은 무시됩니다.
예를 들어 (1, 1)의 위치에서 L 혹은 U를 만나면 무시됩니다.
def solution(N, moves):
moves = moves.split(" ")
d = { 'R': [1, 0], 'L': [-1, 0], 'U': [0, -1], 'D': [0, 1] }
x, y = 0, 0
for move in moves:
dx = x + d[move][0]
dy = y + d[move][1]
if dx >= 0 and dy >= 0 and dx < N and dy < N:
x, y = dx, dy
return "{} {}".format(x + 1, y + 1)
알파벳 대문자와 숫자로만 구성된 문자열이 입력으로 주어집니다.
이때, 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다.예를 들어
K1KA5CB7
이라는 값이 들어오면ABCKK13
을 출력합니다.
def solution(S):
number = 0
alphabet = []
for c in S:
if c >= '0' and c <= '9':
number += int(c)
else:
alphabet.append(c)
alphabet = ''.join(sorted(alphabet))
return alphabet + str(number)