728x90

예제 4-1 상하 좌우

여행자가 NxN 공간 위에 서있으며 시작 좌표는 항상 (1,1) 가장 왼쪽 위 좌표이다 

L:왼쪽으로 한 칸 이동

R:오른쪽으로 한 칸 이동

U:위로 한 칸 이동

D:아래로 한 칸 이동

 

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

 

입력조건

첫째 줄에 공간의 크기를 나타내는 N이 주어지며(1<=N<=100)

둘째 줄에 여행자A가 이동할 계획서 내용이 주어진다.(1<=이동횟수<=100)

 

출력 조건 

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

 

입력예시

5

R R R U D D

 

출력예시

3 4

 

//이코테 예제 4-1 상하좌우 

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int x = 1, y = 1;//시작위치
    string a;
    int input = 0;
    cin >> input;//정사각형 크기 
    cin.ignore();//getline 쓰기전 초기화 
   

    getline(cin,a);//getline으로 받아야 공백이 있어도 입력이 모두됨
  
    
    for (int i = 0; i < a.size(); i++)//입력받은 a size 만큼 for문 
    {
        char plan = a[i];//계획에 입력받은 a[0],a[1].... 입력
       
        switch (plan)//plan으로 switch 하여 구분 
        {
        case 'L':
            if (y > 1)//왼쪽으로 이동시 - 이기때문에 y가 1보다커야 y-1 을해도 0이나 -가 안나와서 1보다 큰경우만 -해주고 
            {
                y = y - 1;
            }
            else 
            {
                
            }
            break;
        case 'R': // 오른쪽으로 이동시 + y가 입력받은 크기보다 작을때 y값을 더해주고 
           
            if (y < input)
            {
                y = y + 1;
            }
            else
            {
                
            }
            break;
        case 'U'://위로 이동시 - x가 1보다클때 - 
            if (x > 1)
            {
                x = x - 1;
            }
            else
            {
                
            }
            break;
        case 'D'://아래로 이동시 + x가 입력받은 값보다 작을때 +
            if (x < input)
            {
                x = x + 1;
            }
            else
            {
                
            }
            break;

        default:
            break;
        }

    }

    cout << x << ' ' << y;

}

 

예제 4-2 

정수 N이 입력되면 00시00분00초 부터 N시 59분59초 까지 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램

 

입력조건

첫째줄에 정수N이 입력된다(0<=N<=23)

출력조건

00시00분00초부터 N시59분59초까지의 모든 시각중에서 3이 하나라도 포함되는 경우의 수를 출력한다.

입력예시

5

출력예시

11475

//이코테 예제 4-2 구현문제
#include <iostream>
using namespace std;

int main()
{
int input;
cin >> input;//정수 N입력받고 
int count = 0;// 카운트
for (int i = 0; i <= input; i++)//시간 만큼돌려주고 
{
for (int j = 0; j < 60; j++)//분은 60분이라서 분만큼돌려주려고
{
for (int k = 0; k < 60; k++)//초도 60초라서 초만큼돌려주려고 
{
if (i % 10 == 3 || j / 10 == 3 || j % 10 == 3 || k / 10 == 3 || k % 10 == 3)//시간은 24시간이 최대기때문에 23 13 3 만 포함 10으로 나눳을때 나머지 3인경우만 COUNT++, 분과 초 같은 경우는 60이라서 30분대는 모두 들어가야하기때문에 분,초/10 몫이 3일때 count++ 분,초/10 나머지가 3일때 count++
{
count++;
}
}
}
}
cout << count;
}

왕실의 나이트

 

8x8 좌표 평면에서 나이트는 

1.수평으로 두칸 이동한뒤에 수직으로 한 칸 이동하기

2.수직으로 두칸 이동한뒤에 수평으로 한 칸 이동하기

 

a1위치에 이동할수 있는 경우의 수는 2가지이다 

1.오른쪽으로 두칸 이동후 아래로 한칸 이동(c2)

2.아래로 두 칸 이동후 오른쪽으로 한칸 이동(b3)

 

c2에 위치해있다면 경우의수는 6가지이다.

입력조건 

첫째줄에 8x8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 무자열이 입력된다. 입력문자는 a1처럼 열과 행으로 이뤄진다.

출력조건

첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오.

 

이 문제 같은경우는 경우의 수가 총 8가지 밖에 되지않아서 if 문으로 풀 수 있었는데, 혹시 궁금해서 깃허브를 찾아보니 int dx[],int dy[] 배열로 이용하여 푸는게 좀더 간단한거 같다.

 

//이코테 왕실의 나이트 문제
#include <iostream>
#include <string>
using namespace std;

int result = 0;

int main()
{
    string input;
    cin >> input;

        int x = input[0]-'a'+1;
        
        int y = input[1]-'0';
        
    
        if (x - 2 >= 1&&y-1>=1)
        {
            result++;
        }
        if (x - 2 >= 1 && y + 1 <= 8)
        {
            result++;
        }
        if (x + 2 <= 8 && y - 1 >= 1)
        {
            result++;
        }
        if (x + 2 <= 8 && y + 1 <= 8)
        {
            result++;
        }
        if (y - 2 >= 1 && x - 1 >= 1)
        {
            result++;
        }
        if (y + 2 <= 8 && x - 1 >= 1)
        {
            result++;
        }
        if (y - 2 >= 1 && x +1 <= 8)
        {
            result++;
        }
        if (y + 2 <= 8 && x + 1 <= 8)
        {
            result++;
        }
        cout << result;
}

구현 문제는 이번에 처음 풀어봤는데 알고리즘을 사용한다기보다는 문제를 이해하고 그거에 맞춰서 구현하는 작업이라 생각하였다.

 

오늘은 포트폴리오 수정 및 노션 이력서 작성 으로 시간을 많이 없어서 이 정도만 구현하였고 내일은 DFS/BFS 들어가기전 자료구조 공부를 좀 할 예정이다. 

 

밑에는 새로만든 노션 이력서 주소 입니다.

https://rust-felidae-111.notion.site/ade95b43269543b7ac5e6e6aea5c2267

 

박시현 | 도전하며 성장하는 개발자

- 파란 볼드체는 링크로 연결됩니다.

rust-felidae-111.notion.site

 

 

반응형