예제 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
'CodingStudy' 카테고리의 다른 글
<Codingstudy>백준 11047번:동전 0 (0) | 2022.07.21 |
---|---|
<CodingStudy> 백준 2839번 : 설탕배달 (0) | 2022.07.21 |
<CodingStudy>백준 10162:보물 (0) | 2022.07.21 |
<CodingStudy>백준 5585번:거스름돈 (0) | 2022.07.20 |
<CodingStudy>백준 11399번:ATM (0) | 2022.07.19 |