[Python] 이것이 코딩 테스트다 with Python - 구현

3 minute read

이것이 코딩 테스트다 with Python - 구현


1. 구현


  • 알고리즘을 소스코드로 바꾸는 과정

  • 풀이는 생각하기 쉽지만 소스 코드로 옮기기 어려운 것 -> 연습 필요

2차원 공간


  • 행렬

    (0,0) (0,1) (0,2) (0,3) (0,4)
    (1,0) (1,1) (1,2) (1,3) (1,4)
    (2,0) (2,1) (2,2) (2,3) (2,4)
    (3,0) (3,1) (3,2) (3,3) (3,4)
    (4, 0) (4,1) (4,2) (4,3) (4,4)
    • 행 (세로 = row) / 열 (가로 = column)

시뮬레이션


  • 완전 탐색 2차원 벡터 : 방향 벡터

  • (0,0) (0,1) (0,2) (0,3) (0,4)
    (1,0) (1,1) (1,2) (1,3) (1,4)
    (2,0) (2,1) (2,2) (2,3) (2,4)
    (3,0) (3,1) (3,2) (3,3) (3,4)
    (4, 0) (4,1) (4,2) (4,3) (4,4)
    # 	  동  북  서 남
    dx = [0, -1, 0, 1] # 행 (0, 위쪽, 0, 아래쪽)
    dy = [1, 0, -1, 0] # 열 (오른쪽, 0, 왼쪽, 0)
      
    # 현재 위치
    x, y = 2, 2
      
    for i in range(4):
    	nx = x + dx[i] //  방향
    	ny = y + dy[i] //  방향
    print(nx, ny)
    

문제 1 > 상하좌우


  • A는 정사각형 N x N 위에 서 있다.
  • 가장 왼쪽 위의 좌표는 (1, 1)이다. 가장 오른쪽 아래는 (N, N) 이다.
  • 상하좌우로 움직일 수 있고 시작좌표는 (1, 1)이다.
  • L : 왼쪽으로 한 칸 이동 / R : 오른쪽으로 한 칸 이동 / U : 위쪽으로 한 칸 이동 / D : 아래쪽으로 한 칸 이동
  • (1,1) 에서 L이나 U는 무시 됩니다.

    ##### 입력 예시


5
R R R U D D
출력 예시

3 4
해결

n = int(input())
line = input().split()
basic = ['L', 'R', 'U', 'D']
# 동 서 남 북
dx = [0, 0, 1, -1]
dy = [-1, 1, 0, 0]

x, y = 1, 1
nx, ny = 0, 0

for b in basic:
    for i in range(len(line)):
        if line[i] == b:
            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)

문제 2 > 시각


  • 정수 N 입력, 00시 00분 00초 ~ N시 59분 59초까지 모든 시각 중 3이 하나라도 포함되는 모든 경우의 수를 구하라
  • 예 ) 1 입력 : 00시 00분 03초, 00시 13분 30초 , … 등
입력 예시

5
출력 예시

11475
해결

hour = int(input())

count = 0
for h in range(hour+1):
	for m in range(60):
		for s in range(60):
			if '3' in str(i)+str(m)+str(s):
				count += 1
print(count)
  • 하루는 86,400 초 (24*60*60) 이므로 완전 탐색을 이용해 계산할 수 있다.

문제 3 > 왕실의 나이트


  • 8 X 8 좌표 평면에 L자 형태로 이동한다.
  • 수평 2칸 이동 후 수직 1칸 이동 할 수 있고
  • 수직 2칸 이동 후 수평 1칸 이동 할 수 있다.
  • 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 구하라.
  • 왕실의 정원에서 행 위치를 표현 할 때 1~8로 표현, 열 위치를 표현 할 때 a ~ h 로 표현 한다.
    • 예) c2에 있을 때 6가지
    • a1일 때에는 2가지
입력 예시

a1
출력 예시

2
해결

# 현재 나이트위 위치 입력 받기
input_data = input()
row = int(input_data[1]) # 행 세로
column = int(ord(input_data[0])) - int(ord('a')) + 1 # 열 가로

# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-1, -2), (1, -2), (2, -1), (2, 1), (1, 2), (-1, 2), (-2, 1)]

# 각 위치로 이동 가능한지 확인
result = 0
for step in steps:
	next_row = row + step[0]
	next_column = column + step[1]
	# 해당 위치로 이동이 가능하다면 카운트 증가
	if next_row >= 1 and next_row <= 8 and next_column >= 1 and next_column <= 8:
		result += 1
print(result)

문제 4 > 문자열 재정렬


  • 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다.
  • 모든 알파벳은 오름차순으로 정렬하여 이어서 출력한 뒤 , 그 뒤 모든 숫자를 더한 값을 이어서 출력합니다.
  • 예) K1KA5CB7 -> ABCKK13
입력 예시

K1KA5CB7
AJKDLSI412KSJSJ9D
출력 예시

ABCKK13
ADDIJJJKKLSS20
해결

data = input()
result = []
value = 0
# 문자를 확인하며
for x in data:
	# 알파벳인 경우 리스트에 삽입
	if x.isalpha():
		result.append(x)
	# 숫자인 경우 더해주기
	else :
		value += int(x)

# 오름차순 정렬
result.sort()

# 숫자가 하나 이상인 경우 가장 뒤에 삽입
if value != 0:
	result.append(str(value))

# 리스트를 문자열로 변환해서 출력
print(''/join(result))

Leave a comment