= 0 && x < 8 && y >= 0 && y < 8){ //돌이랑 같은 위치인 경우 if (x==rx && y==ry){ //돌을 동일한 방향으로 이동시키기 if (strcmp(Move, "R") == 0) rx++; else if (strcmp(Move, "L") == 0) rx--; else if (strcmp(Move, "B") == 0) ry--; else if (strcmp(Move, "T") == 0) ry++; else if (strcm"> = 0 && x < 8 && y >= 0 && y < 8){ //돌이랑 같은 위치인 경우 if (x==rx && y==ry){ //돌을 동일한 방향으로 이동시키기 if (strcmp(Move, "R") == 0) rx++; else if (strcmp(Move, "L") == 0) rx--; else if (strcmp(Move, "B") == 0) ry--; else if (strcmp(Move, "T") == 0) ry++; else if (strcm"> = 0 && x < 8 && y >= 0 && y < 8){ //돌이랑 같은 위치인 경우 if (x==rx && y==ry){ //돌을 동일한 방향으로 이동시키기 if (strcmp(Move, "R") == 0) rx++; else if (strcmp(Move, "L") == 0) rx--; else if (strcmp(Move, "B") == 0) ry--; else if (strcmp(Move, "T") == 0) ry++; else if (strcm">
<aside> 1️⃣
문제: 1063번 킹
체스판에서 킹의 위치가 주어지고 어떻게 움직였는지가 주어짐. 체스판에는 돌도 하나 놓여있는데 킹이 돌의 위치에 오게되면 돌을 킹이 움직인 방향과 동일하게 이동시킴. 킹과 돌의 마지막 위치 구하기
#include <stdio.h>
#include <string.h>
//입력값에 맞게 이동시키는 함수
void update(char King[3], char Rock[3], const char Move[3]){
//int값으로 변경
int x = King[0] - 'A';
int y = King[1] - '1';
int rx = Rock[0] - 'A';
int ry = Rock[1] - '1';
if (strcmp(Move, "R") == 0) x++;
else if (strcmp(Move, "L") == 0) x--;
else if (strcmp(Move, "B") == 0) y--;
else if (strcmp(Move, "T") == 0) y++;
else if (strcmp(Move, "RT") == 0) { x++; y++; }
else if (strcmp(Move, "LT") == 0) { x--; y++; }
else if (strcmp(Move, "RB") == 0) { x++; y--; }
else if (strcmp(Move, "LB") == 0) { x--; y--; }
//킹이 체스판 넘어가지 않는지 확인
if (x >= 0 && x < 8 && y >= 0 && y < 8){
//돌이랑 같은 위치인 경우
if (x==rx && y==ry){
//돌을 동일한 방향으로 이동시키기
if (strcmp(Move, "R") == 0) rx++;
else if (strcmp(Move, "L") == 0) rx--;
else if (strcmp(Move, "B") == 0) ry--;
else if (strcmp(Move, "T") == 0) ry++;
else if (strcmp(Move, "RT") == 0) { rx++; ry++; }
else if (strcmp(Move, "LT") == 0) { rx--; ry++; }
else if (strcmp(Move, "RB") == 0) { rx++; ry--; }
else if (strcmp(Move, "LB") == 0) { rx--; ry--; }
//돌이 체스판 넘어가지 않는지 확인
if (rx >= 0 && rx < 8 && ry >= 0 && ry < 8){
Rock[0] = rx + 'A';
Rock[1] = ry + '1';
King[0] = x + 'A';
King[1] = y + '1';
}
} else { //돌과 겹치지 않는 경우 킹만 이동
King[0] = x + 'A';
King[1] = y + '1';
}
}
}
int main(){
char king[3], rock[3]; //초기 위치
int N; //이동 횟수
scanf("%s %s %d", king, rock, &N);
while(N--){ //이동 횟수만큼 이동 방향 입력받기
char move[3];
scanf("%s", move);
update(king, rock, move); //이동시키기
}
printf("%s\\n%s\\n", king, rock);
}
<aside> 2️⃣
문제: 2346번 풍선 터뜨리기
N개의 풍선이 원형으로 놓여있고, 각 풍선 안에는 -N ~ N의 정수가 적힌 종이가 있음.
처음으로 1번 풍선을 터뜨리고, 1번 풍선 안의 종이에 적힌 값만큼 이동한 뒤 그 자리의 풍선을 터뜨림
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(){
int N;
scanf("%d\\n", &N);
char input[1001];
fgets(input, sizeof(input), stdin); //우선 한줄로 입력 받기
int balloon[N];
int index = 0;
char *token = strtok(input, " "); //공백 제거
while (token != NULL){
balloon[index++] = atoi(token); //정수로 저장
token = strtok(NULL, " ");
}
int visited[N]; //풍선이 터졌는지 여부
memset(visited, 0, sizeof(visited));
int current = 0; //현재 인덱스
int count = 0; //while문 위한 카운트
while(count < N){
printf("%d ", current + 1); //처음에는 1위치에
visited[current] = 1; //방문 처리
count++;
if (count == N) break; //마지막 풍선
int move = balloon[current]; //풍선 안의 숫자만큼 이동
int dir = move > 0 ? 1 : -1; //이동
int step = abs(move);
while (step > 0) {
current = (current + dir + N) % N; //원형
if (!visited[current]) step--;
}
}
}