세상을 바꾸는 데이터

[이코테 코드 리뷰] - 구현 예제 및 실전 문제 본문

PS Study/이코테 문제풀이

[이코테 코드 리뷰] - 구현 예제 및 실전 문제

Industriousness 2022. 1. 26. 12:47

 

이번 포스트에서는 "이코테"에 있는 구현 유형 예제 및 실전 문제를 공부하고 복습한 것을 코드로 적어본다.

 

코딩테스트 공부 - Github 사이트

https://github.com/ndb796/python-for-coding-test

 

GitHub - ndb796/python-for-coding-test: [한빛미디어] "이것이 취업을 위한 코딩 테스트다 with 파이썬" 전체

[한빛미디어] "이것이 취업을 위한 코딩 테스트다 with 파이썬" 전체 소스코드 저장소입니다. - GitHub - ndb796/python-for-coding-test: [한빛미디어] "이것이 취업을 위한 코딩 테스트다 with 파이썬" 전체 소

github.com

 


예제 1) 상하좌우

# 상하좌우

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 nx > n or ny < 1 or ny > n:
    continue
  # 이동 수행
  x, y = nx, ny

print(x, y)

 


예제 2) 시각

# 시각

h = int(input())

count = 0

for i in range(h+1):
  for j in range(60):
    for k in range(60):
      # 매 시간 안에 '3'이 포함되어 있다면 카운트 증가
      if '3' in str(i) + str(j) + str(k):
        count += 1

print(count)

 


실전 1) 왕실의 나이트

# 왕실의 나이트

input_data = input()
row = int(input_data[1])
col = int(ord(input_data[0])) - int(ord('a')) + 1

# 나이트가 이동할 수 있는 방향

steps = [(2,1), (2, -1), (-2, 1), (-2, -1), 
        (1, 2), (-1, 2), (1, -2), (1, -1)]

count = 0

# 8가지 방향 이동가능한지 확인
for step in steps:
  next_row = row + step[0]
  next_col = col + step[1]

  if next_row >=1 and next_row <=8 and next_col >= 1 and next_col <= 8:
    count += 1

print(count)

 


실전 2) 게임 개발

# 게임 개발

n, m = map(int, input().split())

# 방문한 위치를 저장하기 위한 맵을 생성하여 0으로 초기화 
d = [[0] * m for _ in range(n)]

# 현재 캐릭터의 x 좌표, y 좌표, 방향 입력받기
x, y, direction = map(int, input().split())
d[x][y] = 1 # 현재 좌표 방문 처리

# 전체 맵 정보를 입력받기
array = []
for i in range(n):
  array.append(list(map(int, input().split())))


# 북, 동, 남, 서 방향 정의
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

# 왼쪽으로 회전
def turn_left():
  global direction
  direction -=1
  if direction == -1:
    direction = 3

# 시물레이션 시작
count = 1
turn_time = 0

while True:
  # 왼쪽으로 회전
  turn_left()
  nx = x + dx[direction]
  ny = y + dy[direction]
  # 회전한 이후 정면에 가보지 않는 칸이 있을 경우 이동
  if d[nx][ny] == 0 and array[nx][ny] == 0:
    d[nx][ny] = 1
    x = nx
    y = ny
    count += 1
    turn_time = 0
    continue
  # 회전한 이후 정면에 가보지 않는 칸이 없거나 바다인 경우 
  else:
    turn_time += 1
  # 네 방향 모두 갈 수 없는 경우
  if turn_time == 4:
    nx = x - dx[direction]
    ny = y - dy[direction]
    # 뒤로 갈 수 있으면 이동하기
    if array[nx][ny] == 0:
      x = nx
      y = ny
    # 뒤가 바다인 경우 
    else:
      break
    turn_time = 0

# 정답 출력
print(count)

 

게임 개발이 코드 작성하기가 가장 어려웠던 거 같다. 할 수는 있을 거 같은데 막상 하면 잘 안되고 코드가 복잡한 구현,,

다시 복습해야지...


교재 링크:

 

https://book.naver.com/bookdb/book_detail.nhn?bid=16439154 

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오ㆍ삼성전자ㆍ네이버ㆍ라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부

book.naver.com

 

728x90
반응형
Comments