컴공생의 다이어리

상하좌우 본문

Development/Algorithm & Coding Test

상하좌우

컴공 K 2020. 12. 21. 00:13

여행가 A는 N * N 크기의 정사각형 공간 위에 서있다. 이공간은 1 * 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며 가장 오른 쪽 아래 좌표는 (N, N)에 해당한다. 여행가 A는 상, 하 ,좌 ,우 방향으로 이동할 수 있으며 시작좌표는 항상(1, 1)이다. 우리앞에는 여행가가 A가 이동할 계획서가 놓여있다. 계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L, R, U, D중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다.

  • L : 왼쪽으로 한 칸 이동
  • R : 오른쪽으로 한 칸 이동
  • U : 위로 한 칸 이동
  • D : 아래로 한 칸 이동

 

이때 여행가 A가 N * N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 예를 들어 (1, 1) 의 위치에서 L 혹은 U를 만나면 무시된다.

 

 

질문

계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.

 

 

코드로 구현

아래는 파이썬으로 구현한 코드이다.

# L : 왼쪽으로 한 칸 이동
# R : 오른쪽으로 한 칸 이동
# U : 위로 한 칸 이동
# D : 아래로 한 칸 이동

n = int(input())
x, y = 1, 1
plans = input().split()

# L, R, U, D에 따른 이동 방향
move_info = {'L': [0, -1], 'R': [0, 1], 'U': [-1, 0], 'D': [1, 0]}

for plan in plans:
    nx = x + move_info[plan][0]
    ny = y + move_info[plan][1]
    if nx < 1 or ny < 1 or nx > n or ny > n:
        continue
    x, y = nx, ny
print(x, y)

 

아래는 c/c++으로 구현한 코드이다.

#include<iostream>
#include<string>

int main() {
	int N;
	int x = 1, y = 1;
	std::string D;
	std::cin >> N;
	std::cin.ignore();
	getline(std::cin, D);
	for (int i = 0; i < D.length(); i++) {
		if (D[i] == ' ') continue;
		if (D[i] == 'L' && y != 1)
			y -= 1;
		else if (D[i] == 'R' && y != N)
			y += 1;
		else if (D[i] == 'U' && x != 1)
			x -= 1;
		else if (D[i] == 'D' && x != N)
			x += 1;
	}
	std::cout << x << " " << y;
	return 0;
}

 

 

 

www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9791162243077

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 - 교보문고

IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년부터 2020년까지의 코딩 테스트와 알고리즘 대회의 기출문제를 엄선하여 수록하였다. 최근 5년간의 코딩 테스트 기출문제

www.kyobobook.co.kr

 

728x90

'Development > Algorithm & Coding Test' 카테고리의 다른 글

왕실의 나이트  (0) 2020.12.21
시각  (0) 2020.12.21
[프로그래머스] Greedy - 체육복  (0) 2020.12.18
볼링공 고르기  (0) 2020.12.18
만들 수 없는 금액  (0) 2020.12.18
Comments