ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 사분면 고르기 - 14681
    ComputerScience/Algorithm 2024. 9. 12. 11:16
    728x90

    [Bronze V] 사분면 고르기 - 14681

    문제 링크

    성능 요약
    메모리: 31120 KB, 시간: 32 ms

    분류
    구현, 기하학

    제출 일자
    2024년 9월 12일 10:23:09

    문제 설명
    흔한 수학 문제 중 하나는 주어진 점이 어느 사분면에 속하는지 알아내는 것이다. 사분면은 아래 그림처럼 1부터 4까지 번호를 갖는다. "Quadrant n"은 "제n사분면"이라는 뜻이다.

    예를 들어, 좌표가 (12, 5)인 점 A는 x좌표와 y좌표가 모두 양수이므로 제1사분면에 속한다. 점 B는 x좌표가 음수이고 y좌표가 양수이므로 제2사분면에 속한다.

    점의 좌표를 입력받아 그 점이 어느 사분면에 속하는지 알아내는 프로그램을 작성하시오. 단, x좌표와 y좌표는 모두 양수나 음수라고 가정한다.

    입력
    첫 줄에는 정수 x가 주어진다. (−1000 ≤ x ≤ 1000; x ≠ 0) 다음 줄에는 정수 y가 주어진다. (−1000 ≤ y ≤ 1000; y ≠ 0)

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

    후기
    역시나 숏코딩을 보았다.
    print("3421"\[input()>"0"::2\]\[input()>"0"\])

    x의 음양 여부에 따라 34분면인지 21분면인지는 문자열 인덱싱을 이용한다.
    이후 "34" 혹은 "21"이 결정되었으면, 다음 input을 통해 최종적으로 사분면을 결정한다.

    여기서 중요하다고 생각되는 점은, 파이썬에서 type이 string인 자료형 중에서 숫자의 속성을 갖고 있는 자료의 경우 사전 순으로 비교를 한다는 것이다.

    파이썬에서 문자열끼리의 비교는 사전순 (lexicographical order)으로 이루어진다. 이는 각 문자의 유니코드 또는 아스키 값을 기준으로 비교하는 방식이다. 문자열의 첫 번째 문자부터 차례대로 비교하며, 서로 다른 문자가 나올 때까지 계속 비교한다. 다른 문자가 나오면 그 문자의 유니코드 값에 따라 더 큰 문자열이 결정된다.

    문자열 비교는 다음과 같은 순서로 이루어진다:

    첫 번째 문자부터 두 문자열을 비교한다.
    문자의 값이 큰 문자열이 더 큰 문자열로 간주된다.
    두 문자의 아스키 값이 같으면 다음 문자로 넘어가서 비교한다.
    한 문자열이 다른 문자열의 접두어라면 더 긴 문자열이 더 큰 문자열로 간주된다.
    예시:

    "a" > "b" # False (아스키 값 97 < 98)  
    "abc" > "abd" # False (세 번째 문자 "c" < "d")  
    "10" > "2" # False (첫 번째 문자 "1" < "2")  

    위와 같이 각 문자는 그 자체의 유니코드 또는 아스키 값을 기준으로 비교된다. 예를 들어 "a"는 "b"보다 작고, "1"은 "2"보다 작다.

    코드에서의 문자열 비교:

    input() > "0"
    이 코드는 입력받은 문자열과 "0"을 비교한다. 예를 들어:

    입력값이 "1"인 경우: "1" > "0"은 True이다. "1"의 아스키 값은 49, "0"의 아스키 값은 48이므로 "1"이 크다.
    입력값이 "-1"인 경우: "-1" > "0"은 False이다. "0"의 아스키 값은 48인데, "-"의 아스키 값은 45이므로 "-1"은 "0"보다 작다.
    입력값이 "9"인 경우: "9" > "0"은 True이다. "9"의 아스키 값은 57이므로 "0"보다 크다.
    이러한 방식으로 문자열 비교가 이루어지며, 주어진 코드에서 사용자가 입력한 값이 "0"보다 큰지를 판단한다.

    'ComputerScience > Algorithm' 카테고리의 다른 글

    [UJAD] 배열과 오브젝트의 성능 평가  (0) 2024.12.05
    [UJAD] Big O Notation  (0) 2024.11.27
    [BOJ] 윤년 - 2753  (1) 2024.09.12
    [BOJ] 두 수 비교하기 - 1330  (0) 2024.09.11
    [LeetCode] 367. Valid Perfect Score  (0) 2024.04.09
Designed by Tistory.