사분면은 한 평면을 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;
}
이렇게 짧아질 수도 있다
'프로그래머스 C++ > Level.0' 카테고리의 다른 글
프로그래머스 C++ Level. 0 아이스 아메리카노 (0) | 2023.03.13 |
---|---|
프로그래머스 C++ Level. 0 중복된 숫자 개수 (0) | 2023.03.12 |
프로그래머스 C++ Level. 0 배열 두 배 만들기 (0) | 2023.03.09 |
프로그래머스 C++ Level. 0 문자열 뒤집기 (0) | 2023.03.08 |
프로그래머스 C++ Level. 0 배열뒤집기 (2) | 2023.03.07 |