출처: https://school.programmers.co.kr/learn/courses/30/lessons/120841?language=python3
문제 설명
사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.
스크린샷 2022-07-07 오후 3.27.04 복사본.png
x 좌표와 y 좌표가 모두 양수이면 제1사분면에 속합니다.
x 좌표가 음수, y 좌표가 양수이면 제2사분면에 속합니다.
x 좌표와 y 좌표가 모두 음수이면 제3사분면에 속합니다.
x 좌표가 양수, y 좌표가 음수이면 제4사분면에 속합니다.
x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.
제한사항
dot의 길이 = 2
dot[0]은 x좌표를, dot[1]은 y좌표를 나타냅니다
-500 ≤ dot의 원소 ≤ 500
dot의 원소는 0이 아닙니다.
입출력 예
dot result
[2, 4] 1
[-7, 9] 2
입출력 예 설명
입출력 예 #1
dot이 [2, 4]로 x 좌표와 y 좌표 모두 양수이므로 제 1 사분면에 속합니다. 따라서 1을 return 합니다.
입출력 예 #2
dot이 [-7, 9]로 x 좌표가 음수, y 좌표가 양수이므로 제 2 사분면에 속합니다. 따라서 2를 return 합니다.
내가 작성한 코드문
def solution(dot):
answer = 0
if dot[0] > 0 and dot[1] > 0:
return 1
if dot[0] < 0 and dot[1] > 0:
return 2
if dot[0] < 0 and dot[1] < 0:
return 3
if dot[0] > 0 and dot[1] < 0:
return 4
다른 사람의 풀이
def solution(dot):
quad = [(3,2),(4,1)]
return quad[dot[0] > 0][dot[1] > 0]
quad = [
# dot[0] > 0 이 False (x < 0, 즉 0) 일 때
(3, 2), # -> [False (y < 0, 즉 0)], [True (y > 0, 즉 1)]
# dot[0] > 0 이 True (x > 0, 즉 1) 일 때
(4, 1) # -> [False (y < 0, 즉 0)], [True (y > 0, 즉 1)]
]
return quad[dot[0] > 0][dot[1] > 0] 는 다음 순서로 작동한다.
예시 1: dot = (2, 5) (제 1 사분면)
dot[0] > 0 → 2>0 → True (1)
dot[1] > 0 → 5>0 → True (1)
결과: quad[1][1] → (4, 1)[1] → 1
예시 2: dot = (-3, 6) (제 2 사분면)
dot[0] > 0 → −3>0 → False (0)
dot[1] > 0 → 6>0 → True (1)
결과: quad[0][1] → (3, 2)[1] → 2
예시 3: dot = (-4, -2) (제 3 사분면)
dot[0] > 0 → −4>0 → False (0)
dot[1] > 0 → −2>0 → False (0)
결과: quad[0][0] → (3, 2)[0] → 3
def solution(dot):
x,y = dot
if x*y>0:
return 1 if x>0 else 3
else:
return 4 if x>0 else 2
x와 y의 부호가 같은가? (1사분면 또는 3사분면)
만약 x>0 이면 (y도 양수라는 의미) → 1 (제 1 사분면) 반환.
그렇지 않다면 x<0 이고 (y도 음수라는 의미) → 3 (제 3 사분면) 반환.
x와 y의 부호가 다른가? (2사분면 또는 4사분면)
else: x * y > 0 조건에 해당하지 않는 경우입니다. 즉, 두 좌표의 곱이 음수(−)라는 의미이고, 이는 두 좌표의 부호가 서로 다르다는 뜻이다.