프로그래밍/코딩 테스트 연습

[백준] 14681번 : 사분면 고르기 (2단계) (C++)

w_w 2024. 1. 8. 09:32
 

14681번: 사분면 고르기

점 (x, y)의 사분면 번호(1, 2, 3, 4 중 하나)를 출력한다.

www.acmicpc.net

 


 

문제

 

 

 

 

 

 

 

해석

 

정수를 입력받아 조건에 따라 다른 결과를 리턴하는 문제입니다. 이전이 풀었던 점수에 따라 출력이 달라지는 문제와 알고리즘이 동일하는 점을 문제를 통해 알 수 있고, 조건만 이해하면 쉽게 풀 수 있습니다.

 

 

 

 

 

 

 

풀이

 

x, y값에 따라 사분면이 달라지고, 그 기준은 x가 양, 음일 때 y가 양, 음 일 때 달라짐을 문제의 그림을 통해 알 수 있습니다. 따라서 조건의 기준은 x가 0보다 큰지, 작은지 와 y가 0보다 큰지, 작은지에 대해 논리식을 세워야 할 것입니다.

 

처음에 이 문제를 봤을 때 x와 y가 0인 경우에는 어떻게 처리할지 궁금했는데 입력 조건을 보면 0이 될 수 없다는 점을 밝혔기 때문에 x와 y가 0인 되는 경우는 생각하지 않아도 됩니다.

 

종합적으로 문제의 조건은 다음과 같이 표현할 수 있습니다.

    if(x>0 && y>0)
        cout << 1;
    else if (x>0 && y<0)
        cout << 4;
    else if(x<0 && y<0)
        cout << 3;
    else
        cout << 2;

 

단순히 if ~ else 구문만 사용한다면 위와 같이 표현하지만 중첩 구문을 사용한다면 논리 식을 사용하지 않아도 됩니다.

 

if (x>0) {
   if(y>0)
        cout << 1;
    else 
        cout << 4;
        }
else{
    if (y<0)
        cout << 3;
    else
        cout << 2;
    }

 

 

정리하면 결과는 다음과 같습니다.

 

Case 1: 조건식에 논리식을 사용한 경우

 

#include<iostream>
using namespace std;

int main(){
    int x,y;
    cin >> x >> y;
    if(x>0&&y>0)
        cout << 1 ;
    else if (x>0&&y<0)
        cout << 4;
    else if(x<0&&y<0)
        cout << 3;
    else
        cout << 2;
}

 

 

 

Case 2: 조건식에 중첩 if 문을 사용한 경우

 

#include<iostream>
using namespace std;

int main(){
    int x,y;
    cin >> x >> y;
   if (x>0) {
   if(y>0)
        cout << 1;
    else 
        cout << 4;
        }
else{
    if (y<0)
        cout << 3;
    else
        cout << 2;
    }
}

 

 

 

 


 

정리

 

제어문의 조건을 문제에 주어진 형태로 바꾸는 연습을 할 수 있는 문제입니다.

 

논리식을 사용하지 않은 중첩 if문이나 논리식을 사용하는 if ~ else문으로 문제를 풀 수 있습니다.