본문 바로가기
프로그래머스 C++/Level.0

프로그래머스 C++ Level. 0 점의 위치 구하기

by yeni_0224 2023. 3. 11.
728x90
반응형

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

  • x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
  • x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
  • x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
  • x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

int solution(vector<int> dot) {
    int answer = 0;
    if(dot[0] > 0 && dot[1] > 0){
        answer = 1;
    }
    else if(dot[0] < 0 && dot[1] > 0){
        answer = 2;
    }
    else if(dot[0] < 0 && dot[1] < 0){
        answer = 3;
    }
    else if(dot[0] > 0 && dot[1] < 0){
        answer = 4;
    }
    return answer;
}

점의 위치를 구한다는 이름만 보고 겁을 먹었지만 겁먹을 필요가 없다.

이 문제를 보고, 코드를 어떻게 써내려갈 것인가 고민할 때

이거 뭔가 간단한 방법이 있을 것 같은데? 하고 생각했다. 그런 방법을 한번 더 고민해보고 그걸 적어볼까? 했지만 그냥 일단 적기부터 했다. 코딩 강의를 들으며 한결같이 들었던 말은 "그냥 일단 한글로 생각나는 것부터 일단 적으라"는 것이었기 때문이었다. 

 

각 사분면의 조건들을 하나씩 적어주었다.

 x축, y 축으로 나누어져있을 때 어디가 양수 방향인지, 음수방향인지 차분히 나누어보면 된다.

그런 다음 각 사분면에 해당하는 조건이 성립되었을 때 어떤 값을 리턴할 것인지 적어주면 끝이다.

 

dot은 x, y 좌표를 담은 배열이라고 했다. 그렇다면 배열 dot[] 의 기본 형태(?)는 이럴 것이고

1사분면을 예로 들자면 배열 dot에는 3, 2가 들어있다고 할 수 있다.

x는 dot[0] = 3, y는 dot[1] = 2 라고 할 수 있겠다.

 

왜 [] 안의 숫자가 0부터 시작하는가

[] 안에 들어가는 숫자를 "인덱스" 라고 부른다.

배열의 인덱스는 0부터 시작한다. dot[0], dot[1], dot[2], ...

배열에 들어있는 원소?의 갯수는 (배열의 인덱스 숫자 + 1)개 이다

 

다른 분들은 어떻게 풀었나 보자. 보고나서 역시 똑똑한 사람들은 너무 많다. 조켔따

#include <vector>

using namespace std;

int solution(vector<int> dot) {
    int x = dot[0], y = dot[1];
    if(x > 0) {
        if(y > 0) return 1;
        else return 4;
    }
    else {
        if(y > 0) return 2;
        else return 3;
    }
}

x가 양수인 상태에서 y가 양수인지, 음수인지 나누고 그 결과에 따라 값을 나누어주었다.

반대로  x가 음수인 상태에서 y가 양수인지 음수인지 나누어주었다.

if else 문인데  {}괄호가 많이 보이지 않는 이유는

한 줄 길이의 코드를 작성할 경우 굳이 {} 괄호를 적어주지 않고 저렇게만 적어도 되기 때문이다.

그 이유가 뭔지 궁금하다면 나도 모른다. 문법이 그렇다는데 뭐..

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> dot) {
    int answer = 0;
    if(dot[0]*dot[1]>0){
        if(dot[0]>0)
            answer=1;
        else
            answer=3;
    }
    else{
        if(dot[0]>0)
            answer=4;
        else
            answer=2;
    }

    return answer;
}

이 풀이법은 접근법이 재미있어 가져왔다.  dot[0], dot[1]을 곱했을 때 양수인지 음수인지에 따라 케이스를 나누어줬다.

if문 : 양수 x 양수 = 양수,

else문 : 음수 x 양수 = 음수

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> dot) {
    int x = dot[0], y = dot[1];
    if (x > 0 && y > 0) return 1;
    if (x > 0 && y < 0) return 4;
    if (x < 0 && y > 0) return 2;
    if (x < 0 && y < 0) return 3;
}

이렇게 짧아질 수도 있다

728x90
반응형