※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 9772번 문제인 Quadrants이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/9772
9772번: Quadrants
Given the coordinates (x,y) of some points in 2-dimensional plane, find out which quadrant(Q1-Q4) the points are located. If a point is located on X-axis or Y-axis, print out AXIS instead.
www.acmicpc.net
주어지는 좌표평면 위 좌표들에 대하여 각 좌표가 x축 또는 y축 위에 있다면 "AXIS"를, 그렇지 않다면 그 좌표가 존재하는 사분면에 대응되는 문자열을 출력하는 문제이다.
주어지는 좌표의 정밀도를 알 수 없으므로, 주어지는 실수를 문자열로 읽어 해당 수가 0인지 양수인지 음수인지를 판단해 문제를 해결하자.
0은 유한개의 '0'과 중간(맨 처음과 마지막은 제외)에 하나의 '.'로 이루어진 문자열 또는 그 앞에 '+'나 '-'가 붙은 문자열의 형태로만 주어질 수 있음을 이용해 주어진 문자열이 0인지를 판단할 수 있다.
어떤 0이 아닌 수를 나타내는 문자열이 음수를 나타내려면 그 문자열은 항상 '-'로 시작해야한다는 점, 그리고 양수는 '-'로 시작하지 않는다는 점을 관찰하면 0이 아닌 수를 나타내는 문자열이 음수를 나타내는지 또한 판단할 수 있다.
입력의 끝을 나타내는 "0 0" 또한 처리 대상임에 유의해 구현하자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
typedef long double ld;
string x, y;
bool iszero(string& s) {
int idx = 0;
int slen = s.length();
if (s.front() == '+' || s.front() == '-') idx++;
while (idx < slen && s[idx] == '0') idx++;
if (idx < slen && s[idx] == '.') {
idx++;
while (idx < slen && s[idx] == '0') idx++;
}
return idx == slen;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> x >> y;
while (!(iszero(x) && iszero(y))) {
if (iszero(x) || iszero(y)) cout << "AXIS\n";
else {
if (x.front() == '-') {
if (y.front() == '-') cout << "Q3\n";
else cout << "Q2\n";
}
else {
if (y.front() == '-') cout << "Q4\n";
else cout << "Q1\n";
}
}
cin >> x >> y;
}
cout << "AXIS";
}
'BOJ' 카테고리의 다른 글
[BOJ 27451 // C++] 마키마씨가 정해주는 오늘 점심의 맛 (0) | 2023.02.13 |
---|---|
[BOJ 9770 // C++] GCD (0) | 2023.02.13 |
[BOJ 2292 // C++] 벌집 (0) | 2023.02.12 |
[BOJ 27481 // C++] Hotelier (0) | 2023.02.12 |
[BOJ 1392 // C++] 노래 악보 (0) | 2023.02.11 |