오늘의 문제는 “1193번 분수찾기”.
2차원 배열에 규칙에 맞춰 분수를 나열하고 입력으로 정수 n이 주어지면, n번째 칸에 있는 분수를 출력하는 문제이다.
하지만 자세히 보면 분수는 결국 2차원 좌표평면의 점의 위치를 표현하는 것으로 치환해서 생각하면 쉽게 접근할 수 있다.
#include <iostream>
using namespace std;
int main()
{
int num, a, b;
int max = 1; //첫 대각선에는 1번째 숫자까지 포함되고, 두 번째 대각선에는 3번째 숫자까지 포함된다.
int add = 2;
cin >> num;
while (max < num) //num번째 숫자가 포함되는 대각선을 찾는다.
{
max += add;
add++;
}
add--;
if (add % 2 == 0) //대각선이 짝수이면 방향이 왼쪽 아래로 내려가고, 홀수면 오른쪽 위로 올라간다.
{
a = num - (max - add);
b = add - a + 1;
cout << a << " / " << b << endl;
}
else
{
b = num - (max - add);
a = add - b + 1;
cout << a << " / " << b << endl;
}
return 0;
}
이 코드 역시 아무리 봐도 틀린 부분이 없었다
우선 알고리즘 상으로는 틀린 게 없다는 걸 확인한 후, 출력형식을 확인했더니
나는 / 기호 앞뒤로 공백을 붙였지만, 문제에서는 공백이 없는 것을 확인했다.
#include <iostream>
using namespace std;
int main()
{
int num, a, b;
int max = 1;
int add = 2;
cin >> num;
while (max < num)
{
max += add;
add++;
}
add--;
if (add % 2 == 0)
{
a = num - (max - add);
b = add - a + 1;
cout << a << "/" << b << endl;
}
else
{
b = num - (max - add);
a = add - b + 1;
cout << a << "/" << b << endl;
}
return 0;
}
로 출력형식만 고쳤더니 맞았다.
“틀렸습니다”는 여러가지 경우가 있을 수 있다는 걸 알았다.
-
알고리즘이 잘못되어 어떤 테스트 케이스의 경우에는 오답을 낸다.
-
문제가 요구하는 정답을 출력하지 않았다.
2 - 1. 나는 정답을 변수 ans에 저장했으나, 출력은 x를 했다.
2 - 2. 정답이지만, 출력 형태가 잘못됐다.
등으로 나눠볼 수 있겠다.