※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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";
}
728x90

'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

+ Recent posts