티스토리 뷰

반응형
 

14681번: 사분면 고르기

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

www.acmicpc.net

x = int(input())
y = int(input())

if x > 0:
    print(1 if y > 0 else 4)
else:
    print(2 if y > 0 else 3)

x가 0 이상일 때를 기준으로 해서 if else 문을 이중으로 써주면 된다.

문제 입력에 (0,0)은 들어가지 않으므로 써줄 수 있다. 만약 0,0이 들어간다면 elif를 한개 더 만들어서 예외처리를 해야만 한다.

 

print("3421"[input()>"0"::2][input()>"0"])

숏코딩으로 하면 다음과 같이 할 수도 있다.

첫번에 input에 x가 들어가고, 두번째 input에 y가 들어가서 extended slice인 ::를 수행한다.

(숫자)::2 라는 뜻은 숫자부터 끝까지 2칸 간격으로 출력한다는 뜻이다. 따라서 x가 양수면, True, 즉, 1이 들어가므로 

인덱스 1부터 끝까지 2칸 간격으로 출력한다. 따라서 "3421"에서 인덱스 1은 4, 인덱스 3은 1이므로

'41' 이 먼저 만들어진다.

 

이렇게 얻은 '41'에서 y가 양수가 되면, 인덱스에 들어가는 건 [True], 즉, [1] 이므로

'41'에서의 1 인덱스인 1이 출력된다.

 

이렇게만 보면 좋아보이지만, 필자는 별로 추천하지 않는다. 시간복잡도 측면에서 그냥 if문 쓰는 게 더 빠르기 떄문이다.

그러니 웬만하게 비슷하지 않은 이상, 시간복잡도를 고려하면서 숏코딩을 짜자.

반응형