본문 바로가기

매일매일 (Everyday)

[BOJ] - if문 - Python

1330: 두 수 비교하기

# 1330:두 수 비교하기
A, B = map(int, input().split())

if A > B :
    print('>')
if A < B :
    print('<')
if A == B :
    print('==')
    
    ## 다른풀이
a,b=map(int,input().split())
print(("<>"[a>b],"==")[a==b])

다른 풀이가 너무 이해가 안가서 쪼개서 접근해봤어요.

a와 b가 같을 때, ( x, y )[0] 는 x를 출력하겠고, ( x, y )[1] 는 y를 출력하게 되겠네요. 접근하는 아이디어가 신기해요 ㅋㅋ

("<>"[a>b],"==")[a==b] 로 볼 때 튜플 인덱싱으로 접근

"<>"[a>b] 로 볼 때는 문자열 인덱싱으로, [ ] 안에 bool을 넣어줌으로써 ifelse느낌으로 구성했네요.

 

9498: 시험 성적

# 9498: 시험 성적
score = int(input())

if score >= 90 :
    print('A')
elif score >= 80 :
    print('B')
elif score >= 70 :
    print('C')
elif score >= 60 :
    print('D')
else :
    print('F')
    
    ## 다른풀이
print("FFFFFFDCBAA"[int(input())//10])

    ## 다른풀이
print({10:'A',9:'A',8:'B',7:'C',6:'D'}.get(int(input())//10, 'F'))

    ## 다른풀이
a = int(input())
print('F' if a<60 else('D' if a<70 else('C' if a<80 else('B' if a<90 else('A')))))

`시험 성적` 문제에서 첫번째 다른풀이 아이디어가 되게 신선해서 가져와봤어요.

[ ] 을 이용해서 문자열 인덱싱한건데 어떻게 이런 생각을 하는지 신기하네요.

마지막 다른 풀이는 엑셀 =if, R에서 ifelse랑 비슷하게 생겨서 가져와봤습니다.

 

2753: 윤년

# 2753: 윤년
year = int(input())

if (year % 4 == 0 and year % 100 != 0) or (year % 4 == 0 and year % 400 == 0) :
    print(1)
else :
    print(0)
# 예시와 문제에서 주어진 논리를 반복하여 읽고 이해하도록 노력해보자.

    ## 다른 풀이
y=int(input())
print(+((y%100or y//100)%4<1))

    ## 다른 풀이
a = int(input())
print(int((a%4==0)and(a%100!=0)or(a%400==0)))

    ## 다른 풀이
y=int(input())
print(1 if y%4==0 and(y%100!=0 or y%400==0)else 0) # 내가 이해했던 논리를 잘 표현하는 코드

- 주어진 문제에서 조건과 논리를 충분히 이해하도록 반복해서 문제 읽기

윤년은 연도가 4의 배수이면서, 100의 배수가 아닐 때 또는 400의 배수일 때이다.

4의 배수 & ( not 100의 배수 or 400의 배수)

 

14681: 사분면 고르기

# 14681: 사분면 고르기
x = int(input())
y = int(input())

if x > 0 and y > 0 :
    print(1)
elif x < 0 and y > 0 :
    print(2)
elif x > 0 and y < 0 :
    print(4)
else :
    print(3)
    
    ## 다른 풀이
print("3421"[input()>"0"::2][input()>"0"])

이 문제 또한 숫자지만, 문자열 인덱싱으로 접근해서 풀었습니다.

:: 은 슬라이싱 생각하시면 됩니다.
예시)

array = [1,2,3]

array[::2] # 2칸 간격으로 처음부터 출력하라.

-> [1, 3]

``인덱싱과 슬라이싱, bool을 활용해서 적절하게 if문을 구성할 수 있다.`` 는 사실을 배웠습니다.

 

2884: 알람 시계

# 2884: 알람 시계
H, M = map(int, input().split())

if M >= 45 :
    print(H, M-45)
else :
    print(H-1, 60+(M-45))

## 0에 대한 접근
H, M = map(int, input().split())

if H-1 >= 0 :
    if M >= 45 :
        print(H, M-45)
    else :
        print(H-1, 60+(M-45))
else :
    if M >= 45 :
        print(H, M-45)
    else :
        print(23, 60+(M-45))
        
# 0에서 23으로 가는 케이스에 대한걸 매끄럽게 짜고 싶은데 if 문을 하나 더 넣었음
# 더 좋은 방법은 없는건지?

    ## 다른 풀이
h, m = map(int, input().split())

if m-45<0:
    h-=1
print(h%24, (m-45)%60)

    ## 다른 풀이
h, m = map(int, input().split())

if m < 45:
    m = m + 60
    h = h - 1

print(h%24, m-45)

-1 % 24 의 결과는 23입니다. 이 아이디어 생각하시면 정답의 이해가 빠르실거라 생각합니다.

24시에서 분 단위를 빼면 23시로 넘어갑니다. <=> (-1 % 24 == 23) # -1을 24로 나눈 나머지는 23이다.