문제
여행가 A는 N X N 크기의 정사각형 공간 위에 서 있다.
이 공간은 1 x 1 크기의 정사각형으로 나 누어져 있다.
가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)에 해당한다.
여행 가 는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)이다.
우리 앞에는 여행 카 A가 이동할 계획이 적힌 계획서가 놓여 있다
계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L. R, U, D 중 하나의 문자가 반복적으로 적혀 있다. 각 문자의 의미는 다음과 같다.
• L: 왼쪽으로 한 칸 이동
• R: 오른쪽으로 한 칸 이동
• U: 위로 한 칸 이동
• D: 아래로 한 칸 이동
이때 여행가 A가 N X N 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 예를 들어 (1, 1)
의 위치에서 L 혹은 U를 만나면 무시된다.
계획서가 주어졌을때, 여행가 A가 최종적으로 도착할 지점의 좌표를 출려하는 프로그램을 작성하시오.
입력
• 첫째 줄에 공간의 크기를 나타내는 N이 주어진다. (1 ≤ N ≤ 100)
• 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1 ≤ 이동 횟수 ≤ 100)
출력
• 첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (X, Y)를 공백으로 구분하여 출력한다.
배운점
#include
istream& getline (istream& is, string& str);
입력받을 인자의 갯수가 정해지지 않고, 임의의 갯수를 입력 받아야 하는경우 getline()함수를 사용하자
느낀점
저자 처럼
하지만, 나는 42서울에서 c로 개발하던 스타일대로 구조체와 그에 맞는 함수를 만들어 봤다. 가독성은 더 좋은것 같은데, 좀 더 어려운 과제를 만나면 힘들지도 모르겠다. 또한 프로젝트로서는 좋은 코드일지라도 코딩테스트에서 좋을지 모르겠다.
#include <iostream>
#include <string>
typedef struct s_pos
{
int x;
int y;
int N;
} t_pos;
void move_u(t_pos *pos)
{
if (pos->x > 1)
pos->x -= 1;
}
void move_d(t_pos *pos)
{
if (pos->x < pos->N)
pos->x += 1;
}
void move_l(t_pos *pos)
{
if (pos->y > 1)
pos->y -= 1;
}
void move_r(t_pos *pos)
{
if (pos->y < pos->N)
pos->y += 1;
}
int main(void)
{
int N;
std::cin >> N;
std::cin.ignore();
t_pos pos;
pos.x = 1;
pos.y = 1;
pos.N = N;
std::string orderList;
getline(std::cin, orderList);
for (int i=0; i<orderList.size(); i++)
{
if (orderList[i] == 'U')
move_u(&pos);
else if (orderList[i] == 'D')
move_d(&pos);
else if (orderList[i] == 'L')
move_l(&pos);
else if (orderList[i] == 'R')
move_r(&pos);
}
std::cout << pos.x << " " << pos.y << std::endl;
}
'알고리즘' 카테고리의 다른 글
[알고리즘] dfs알고리즘 (c++) (0) | 2023.07.09 |
---|---|
[알고리즘] (구현 유형) game (from. 이코테) (0) | 2023.07.02 |
[알고리즘] (구현 유형) KnightOfKingdom.cpp (from 이코테) (0) | 2023.06.25 |
[알고리즘] (구현) 시간.cpp (from 이코테) (0) | 2023.06.23 |
[알고리즘] dfs 깊이 우선 탐색 (0) | 2023.06.17 |