Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

최용우

백준[1488] 숌트링 파이썬 본문

알고리즘

백준[1488] 숌트링 파이썬

용우쨩 2023. 2. 16. 23:12

문자열 문제 같지만 사실은 수학 문제.

a, b, c, d

4개의 음이 아닌 정수가 주어진다.

 

1) a, b, c, d 중 하나라도 0인 경우

2) a, b, c, d 모두 1 이상의 값일 때

 

두번째 경우 작은 수들 사이를 경계로 만들어 줄 수 있다.

예를 들어 b = 3 이면 아래 파란색 타원과 같이 a가 들어갈 자리는 b + 1 = 4 이 된다.

b + 1 개 자리에서 a의 짝들이 최대 몇개까지 들어갈 수 있는지 계산 해주면 된다. (maxA, maxB가 모두 1이상임을 보장하므로)

만약 a == b 라면 a의 짝들은 타원 3개를 차지하므로 b * 2

a == b + 1 이라면 a + b

a > b + 1 이라면 min(maxA * (b + 1), a) + b

 

끝.

import sys
input = sys.stdin.readline
a, b, c, d = map(int, input().split())

#무조건 a가 큰 수로 만든다.
if a < b:
    a, b = b, a
    c, d = d, c

#a,b,c,d 중 0이 하나라도 있는 경우
if a == 0 or c == 0:
    print(min(b, d))
elif b == 0 or d == 0:
    print(min(a, c))
#그렇지 않은 경우
else:
    semi = b + 1
    if a < semi:
        print(b * 2)
    elif a == semi:
        print(b + a)
    else:
        print(min(semi * c, a) + b)

 

 

 

 

'알고리즘' 카테고리의 다른 글

백준[1721] 상자퍼즐(파이썬)  (1) 2023.03.01
백준[1749] 점수따먹기(파이썬)  (0) 2023.03.01
백준[1570] 오세준  (0) 2023.02.26
다익스트라 vs 플로이드 와샬 vs 벨만포드  (1) 2022.12.17
퀵(Quick) 정렬  (0) 2022.07.31