코딩 기록들

[ 이코테 ] 구현_아이디어를 코드로 바꾸기 & 상하좌우 문제 본문

이코테_문제풀기_python

[ 이코테 ] 구현_아이디어를 코드로 바꾸기 & 상하좌우 문제

코딩펭귄 2023. 2. 26. 15:09

구현하기 어려운 문제?

- 알고리즘은 간단한데 코드가 너무 길어지는 문제

- 특정소수점까지 출력하는 문제

- 문자열이 입력으로 주어질때 한문자단위로 끊어서 리스트에 넣어야하는 문제(파싱)

 

구현시 고려해야하는 메모리 제약사항

- c / c++ 에는 제약이 많지만, 파이썬에서는 매우큰수의 연산또한 기본으로 지원한다.

(다만, 파이썬에서의 실수형변수는 다른언어와 마찬가지로 유효숫자에따라 연산결과가 원하는값이 나오지않을수도 있다)

 

파이썬에서 리스트 크기

- 파이썬에서 여러개의 변수를 사용할떄는 리스트를 이용한다. 주의사항 : 코딩테스트의 메모리제한

<   int형 자료형데이터의 개수에따른 메모리 사용량  >

데이터 개수 (리스트 길이) 메모리 사용량
1.000 약 4KB
1.000.000 약 4MB
10.000.000 약 40MB

주의할점 : 리스트를 여러개 선언했을떄, 그중에서 크기가 1000만 이상인 리스트가있다면?

--> 메모리용량제한으로 문제를 풀수없다

 

 

예제 _ 1. 상하좌우

여행가 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를 만나면 무시된다 )
다음은 N = 5인 지도와 계획이다

 

 

입력조건

첫째 줄에 공간의 크기를 나타내는 N이 주어집니다. (1<=N<=100)
둘째 줄에 여행가 A가 이동할 계획서 내용이 주어집니다. (1<=이동 횟수<=100)

출력조건

첫째줄에 여행가 A가 최종적으로 도착할 지점의 좌표(X, Y)를 공백으로 구분하여 출력한다.

 

입력 예시

5

R R R U D D

출력예시

3 4

 

접근방법

1. 지도사이즈 n 받기

2. 이동할계획 plan 받기

3. 키값 = L R U D & 이동하는 좌표값 딕셔너리로 정의

4. 현재위치 정의

 

for문 시작

5. 이동할 계획을 한 문자씩 plan에서 받아와서 이동한 위치 저장

6. 단, 지도 공간 내에 있을때만 저장하도록 제한하기

n = int(input())
plan = list(map(str, input().split()))    

# 키가 이동하는 방향 좌표
direction = {
    'L' : (0, -1),
    'R' : (0, 1),
    'U' : (-1, 0),
    'D' : (1, 0)
}

# 현재좌표
now = [1,1]

for i in plan:
    next_x = now[0] + direction[i][0]   # 현재 x + 움직일 x
    next_y = now[1] + direction[i][1]   # 현재 y + 움직일 y
    if 0 < next_x <= n and 0 < next_y <= n:  # 공간안에있을때  
        now = [next_x, next_y]  # 이동하기

print(now[0], now[1])