이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 의 책과 강의를 보고 정리한 글입니다.
강의 출처 : https://www.youtube.com/channel/UChflhu32f5EUHlY7_SetNWw
구현이란, 머릿속에 있는 알고리즘을 소스코드로 바꾸는 과정이다.
풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제를 말한다.
일반적으로 알고리즘 문제에서의 2차원 공간은 행렬(Matrix)의 의미로 사용된다.
예를 들어 2차원 맵의 한 좌표에 존재하는 캐릭터가 반복적으로 어떤 위치로 이동한다고 했을 때 적절히 해결하기 위해 행렬에 대한 개념이 필요하다.
시뮬레이션 및 완전 탐색 문제에서는 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)
# 2 3 동
# 1 2 북
# 2 1 서
# 3 2 남
여행가 A는 N x N 크기의 정사각형 공간 위에 서 있다. 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다.
<이동 계획서>
하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D 중 하나의 문자가 반복적으로 적혀 있다.
입력 조건
출력 조건
# N 입력 받기
n = int(input())
x, y = 1, 1
plans = input().split()
# L, R, U, D에 따른 이동 방향
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ["L", "R", "U", "D"]
# 이동 계획을 하나씩 확인하기
for plan in plans:
# 이동 후 좌표 구하기
for i in range(len(move_types)):
if plan == move_types[i]:
nx = x + dx[i]
ny = y + dy[i]
# 공간을 벗어나는 경우 무시
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
# 이동 수행
x, y = nx, ny
print(x, y)
정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오.
입력 조건
출력 조건
<해결 아이디어>
가능한 모든 시각의 경우를 하나씩 모두 세서 풀 수 있는 문제
하루는 86,400초이므로, 00시 00분 00초부터 23시 59분 59초까지이 모든 경우는 86,400가지 이다. 따라서 단순히 시각을 1씩 증가시키면서 3이 하나라도 포함되어 있는지를 확인하면 된다.
N = int(input(""))
count = 0
for k in range(N+1):
for j in range(60):
for i in range(60):
if "3" in str(k) + str(j)+str(i):
count += 1
print(count)
왕실 정원은 체스판과 같은 8 x 8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서있다. 나이트는 L자 형태로만 이동할 수 있으며 정원 밖으로는 나갈 수 없다.
나이트는 특정 위치에서 다음과 같은 2가지 경우로 이동 가능하다.
1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기
2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기
좌표 평면상에서 나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하시오.
입력 조건
출력 조건
point = input("")
points = [point[0], point[1]]
dx = [2, 2, -2, -2, 1, -1, 1, -1]
dy = [1, -1, 1, -1, 2, 2, -2, -2]
x, y = (ord(points[0])-ord('a') + 1), int(points[1])
count = 0
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if nx < 1 or ny < 1 or nx > 8 or ny > 8:
continue
count += 1
print(count)
알파벳 대분자와 숫자(0 ~ 9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모듣ㄴ 숫자를 더한 값을 일어서 출력한다.
ex) K1KA5CB7 -> ABCKK13
입력 조건
a = list(input(""))
b = []
sum = 0
for i in a:
if 65 <= ord(i) <= 90: # i.isalpha()
b.append(i)
elif 48 <= ord(i) <= 57:
sum += int(i)
# b.sort()
# for i in b:
# print(i, end="")
# print(sum)
b.sort()
if sum != 0:
b.append(str(sum))
print(''.join(b))