ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [BOJ] 두 수 비교하기 - 1330
    ComputerScience/Algorithm 2024. 9. 11. 14:49
    728x90

    문제

    문제 설명

    두 정수 A와 B가 주어졌을 때, A와 B를 비교하는 프로그램을 작성하시오.

    입력

    첫째 줄에 A와 B가 주어진다. A와 B는 공백 한 칸으로 구분되어져 있다.

    출력

    첫째 줄에 다음 세 가지 중 하나를 출력한다.

    • A가 B보다 큰 경우에는 '>'를 출력한다.
    • A가 B보다 작은 경우에는 '<'를 출력한다.
    • A와 B가 같은 경우에는 '=='를 출력한다.

    성능 요약

    메모리: 31120 KB, 시간: 32 ms

    분류

    • 구현

    접근 방법

    입력을 받고, 리스트 인덱싱을 통해 대소를 비교하는 방식을 선택하였다.

    import sys  
    input = sys.stdin.readline  
    
    arr = list(map(int, input().split()))  
    
    if arr\[0\] > arr\[1\]:  
      print('>')  
    elif arr\[0\] < arr\[1\]:  
      print('<')  
    else:  
      print("==")

    올바르게 출력되었다.

    정답

    숏코딩

    a,b=map(int,input().split())
    print(['><'[a<b],'=='][a==b])

    후기

    미친 가독?성이다.

    코드가 잘 이해가 안되어서 claude에게 분석을 부탁하였다.

    그래서 새로 알게 된 사실이라기보단 알고 있었던 지식을 복기해보자면

    1. 리스트 인덱싱:
    • '><'[a<b]: 이 부분은 문자열 '><'에서 a<b의 결과에 따라 인덱싱한다.
      • a<b가 True면 1을 반환하여 '>'를 선택한다.
      • a<b가 False면 0을 반환하여 '<'를 선택한다.
    1. 리스트 생성:
    • ['><'[a<b],'==']: 이것은 두 요소를 가진 리스트를 만든다.
      • 첫 번째 요소는 위에서 설명한 '><'[a<b]의 결과이다.
      • 두 번째 요소는 문자열 '=='이다.
    1. 조건부 선택:
    • [...][a==b]: 이 부분은 a==b의 결과에 따라 위에서 만든 리스트의 요소를 선택한다.
      • a==b가 True면 1을 반환하여 두 번째 요소 '=='를 선택한다.
      • a==b가 False면 0을 반환하여 첫 번째 요소 ('>' 또는 '<')를 선택한다.

    여기서 약간 생소한 부분은 '조건부 선택' 부분인데,

    리스트의 인덱싱을 하게 되면 [a==b]가 참이면 1, 거짓이면 0이므로 ['><'[a<b],'==']의 0번째 요소나 1번째 요소를 반환하게 되는 것이다.

    이 문법이 조금 헷갈려서 다시 한 번 물어봤다.

    ['><'[a<b],'=='][a==b] 부분은 리스트의 인덱싱을 하는 것이다.

    여기서 a==b는 불리언 표현식으로, True 또는 False를 반환한다.

    파이썬에서 불리언 값을 인덱스로 사용할 때:

    • False는 0으로 취급된다.
    • True는 1로 취급된다.

    따라서:

    a==b가 False일 때 (즉, a와 b가 다를 때):
    ['><'[a<b],'=='][False]['><'[a<b],'=='][0]과 동일하다.
    이는 리스트의 첫 번째 요소인 '><'[a<b]를 선택한다.

    a==b가 True일 때 (즉, a와 b가 같을 때):
    ['><'[a<b],'=='][True]['><'[a<b],'=='][1]과 동일하다.
    이는 리스트의 두 번째 요소인 '=='를 선택한다.

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

    [BOJ] 사분면 고르기 - 14681  (1) 2024.09.12
    [BOJ] 윤년 - 2753  (1) 2024.09.12
    [LeetCode] 367. Valid Perfect Score  (0) 2024.04.09
    [LeetCode] 166. Fraction to Recurring Decimal  (0) 2024.04.09
    [BOJ] 히든 넘버 - 8595  (0) 2024.04.09
Designed by Tistory.