Algorithm/이코테(2021)

02. 구현

Jonnie 2022. 2. 15. 22:58

문제 1. 상하좌우

N x N 크기의 정사각형 공간이 있다. 가장 왼쪽 위 좌표는 (1, 1)이며 가장 오른쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다.

L: 왼쪽으로 한 칸 이동

R: 오른쪽으로 한 칸 이동

U: 위로 한 칸 이동

D: 아래로 한 칸 이동

입력 조건
첫 번째 줄에 공간의 크기를 나타내는 N이 주어진다. (1 <= N <= 100)
두 번째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1 <= 이동횟수 <= 100)
출력 조건
첫 번째 줄에 여행가 A가 최종적으로 도착할 지점 좌표 (X, Y)를 공백을 기준으로 구분하여 출력한다.
 

N = int(input())
plan = list(input().split())

# 현재 위치
x, y = 1, 1

for i in plan:
  if i == "R":
    if y == N:
      continue
    else:
      y += 1
  elif i == "L":
    if y == 1:
      continue
    else:
      y -= 1
  elif i == "U":
    if x == 1:
      continue
    else:
      x -= 1
  elif i == "D":
    if x == N:
      continue
    else:
      x += 1
  else:
    "Wrong Direction!"
    
print(x, y)

* 방향 벡터가 이해 안 돼서 위처럼 풀었는데 영상보면서 방향 벡터 이해 완료


문제 2. 시각

정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성하시오.

입력 조건
첫 번째 줄에 정수 N이 입력된다. (0 <= N <= 23)
출력 조건
00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 출력한다
 

 


h = int(input())  
count = 0
for i in range(h+1):
  for j in range(60):
    for k in range(60):
      if '3' in str(i) + str(j) + str(k):
        count += 1
print(count)

* 너무 복잡하게 풀어서 시간 내에 풀기 실패. 해설 참고


문제 3. 왕실의 나이트

8x8 좌표 평면인 왕실에서 두 가지 경우로만 이동이 가능한 나이트가 있다.

1. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동

2. 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동

나이트의 위치가 주어졌을 때 나이트가 이동할 수 있는 경우의 수를 출력하는 프로그램을 작성하시오.

행 위치를 표현할 때는 1부터 8로 표현하며, 열 위치를 표현할 때는 a부터 h로 표현한다.

입력 조건
첫 번째 줄에 8 X 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다.
입력 문자는 a1처럼 열과 행으로 이루어진다.
출력 조건
첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.
 

# 현재 나이트의 위치 입력 받기
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)]

# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
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)

* 문제 해결 아이디어까지는 접근을 했는데 8가지 방향을 일일히 지정해도 된다는 생각을 못해서 꼬였다


문제 4. 문자열 재정렬

알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다.

입력 조건
첫 번째 줄에 하나의 문자열 S가 주어진다. (1 <= S의 길이 <= 10,000)
출력 조건
첫 번째 줄에 문제에서 요구하는 정답을 출력한다
 

S = list(input())
S.sort()
numbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

result = ""
result_num = 0

for i in S:
  if i in numbers:
    result_num += int(i)
  else:
    result += i

print(result + str(result_num))

'Algorithm > 이코테(2021)' 카테고리의 다른 글

03. DFS/BFS  (0) 2022.05.18
02. 그리디  (0) 2022.02.15