-
[BOJ] 두 수 비교하기 - 1330ComputerScience/Algorithm 2024. 9. 11. 14:49728x90
문제
문제 설명
두 정수 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에게 분석을 부탁하였다.
그래서 새로 알게 된 사실이라기보단 알고 있었던 지식을 복기해보자면
- 리스트 인덱싱:
'><'[a<b]
: 이 부분은 문자열 '><'에서 a<b의 결과에 따라 인덱싱한다.- a<b가 True면 1을 반환하여 '>'를 선택한다.
- a<b가 False면 0을 반환하여 '<'를 선택한다.
- 리스트 생성:
['><'[a<b],'==']
: 이것은 두 요소를 가진 리스트를 만든다.- 첫 번째 요소는 위에서 설명한 '><'[a<b]의 결과이다.
- 두 번째 요소는 문자열 '=='이다.
- 조건부 선택:
[...][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 - A가 B보다 큰 경우에는 '