#include<stdio.h>
int plus(int k)
{
if (k < 0)
return(-k);
return k;
}
int main()
{
char knight[3];
char next[3];
int check = 1;
int first = 0;
for (int i = 0; i < 18; i++)
{
scanf("%s", knight);
if(first!=0)
if (plus(knight[0] - next[0]) + plus(knight[1] - next[1]) != 3)
check = -1;
scanf("%s", next);
if (plus(knight[0] - next[0]) + plus(knight[1] - next[1]) != 3)
check = -1;
first = 1;
}
if (check == 1)
printf("Valid");
else
printf("Invalid");
}
처음에는 나이트가 이동하는 경로가 정상적일때만 체크를 해서 메모리를 아꼈었다. 하지만 이게 정답이 아니었고 사실 나이트가 갔을 곳을 갔을때도 정확하지 않다는 것을 알게되었다.
#include<stdio.h>
int plus(int k)
{
if (k < 0)
return(-k);
return k;
}
int main()
{
char knight[36][3];
char next[36][3];
int check = 1;
int first = 0;
for (int i = 0; i < 36; i++)
{
scanf("%s", knight[i]);
}
for (int i = 0; i < 36; i++)
{
if (i != 35)
{
if (plus(knight[i][0] - knight[i + 1][0]) + plus(knight[i][1] - knight[i + 1][1]) != 3||knight[i][0]==knight[i+1][0]|| knight[i][1] == knight[i + 1][1])
check = -1;
}
for (int j = 1; j + i < 36; j++)
{
if (knight[i][0] == knight[i + j][0] && knight[i][1] == knight[i + j][1])
check = -1;
}
}
if (plus(knight[0][0] - knight[35][0]) + plus(knight[0][1] - knight[35][1]) != 3)
check = -1;
if (check == 1)
printf("Valid");
else
printf("Invalid");
}
정말 다양한 예외가 있었다. 앞뒤가 같을때랑 마지막에 복귀하는경우까지 다 추가해서 결국 맞췄다.
이 글은 코딩 꼬꼬마 시절에 푼 문제를 보관한 글로 네이버에 저장해둔 글을 옮긴 글입니다.
혹시나 참고하시는 부분에 이상한 부분이나 질문이 생긴다면 남겨주시면 친절히 답변 드리겠습니다.
728x90
'알고리즘 기초시절' 카테고리의 다른 글
백준 (C언어)백준 1002번 터렛 원의 내접 외접 조건문제 (0) | 2023.01.04 |
---|---|
백준 (C언어)그리디 알고리즘 단어수학 백준1339번 (0) | 2023.01.04 |
백준 (C언어)백준 14503 로봇청소기(구현 시뮬레이션 맵탐색) (2) | 2023.01.04 |
백준 (C언어)백준 10828번 스택 스택 구현문제 (0) | 2023.01.04 |
백준 (C언어)백준 DFS와 BFS문제 1260번 (0) | 2023.01.04 |