코딩 기록들
[ 이코테 ] 구현_아이디어를 코드로 바꾸기 & 상하좌우 문제 본문
구현하기 어려운 문제?
- 알고리즘은 간단한데 코드가 너무 길어지는 문제
- 특정소수점까지 출력하는 문제
- 문자열이 입력으로 주어질때 한문자단위로 끊어서 리스트에 넣어야하는 문제(파싱)
구현시 고려해야하는 메모리 제약사항
- 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])
'이코테_문제풀기_python' 카테고리의 다른 글
[이코테] 그리디_1이 될 때까지 (0) | 2023.02.23 |
---|---|
[이코테] 그리디_숫자 카드 게임 (0) | 2023.02.23 |
[이코테] 그리디_큰수의 법칙 (1) | 2023.02.22 |