Baekjoon/IM Level

[백준] 3985 롤케이크 (브론즈1)

hellosonic 2023. 3. 8. 09:07

문제요약

나의 코드 및 설명

  • 방청객의 번호를 출력해야 하므로, <expect_ans>, <fin_ans> 에 인덱스를 저장한다.
l = int(input())
n = int(input())
cake_list = [0 for _ in range(l+1)]

expect = 0 #가장 많은 조각을 받은 방청객이 기대한 케이크 수 
expect_ans = 0 #인덱스

#방청객 수만큼 for문을 수행한다.
for i in range(1,n+1):
    p,k = map(int, input().split())
    #현재 기대 케이크 수가 이전 기대 케이크 수와 같다면 그대로 유지한다.(작은번호 출력)
    if expect == k-p+1:
        expect = expect
    #기대한 케이크 수가 최대라면, expect에 현재 기대 케이크 수를 저장한다.
    elif max(expect, k-p+1) == k-p+1:
        expect = k-p+1
        expect_ans = i
    for j in range(p, k+1):
        if cake_list[j] == 0:
            cake_list[j] = i
        else:
            continue
        
fin = 0
fin_ans = 0
for i in range(1,n+1):
    #현제 실제로 받은 케이크 수가 이전 실제로 받은 케이크 수와 같다면 그대로 유지한다.
    if fin == cake_list.count(i):
        fin = fin
    #실제로 받은 케이크 수가 최대라면, fin에 실제 받은 케이크 수를 저장한다.
    elif max(fin, cake_list.count(i)) == cake_list.count(i):
        fin = cake_list.count(i)
        fin_ans = i #현재 반복문 수행 번호를 저장한다.(방청객 번호)
    else:
        continue
print(expect_ans, fin_ans, sep = "\n")

다른 코드 및 설명

l = int(input())
n = int(input())

cake = [0] * (l + 1) # 0 0 0 0 0 0 0 0 0 0 
               # 0 1 1 1 0 3 2 2 3 0
received = [0] * (n + 1)
maxPieces,wantMaxNum = 0, 0

for i in range(1, n+1):
    count = 0
    start, end = map(int, input().split())

    #가장 많은 조각을 받을 것이라고 기대한 방청객 번호
    wantPieces = end - start
    if maxPieces < wantPieces:
        maxPieces = wantPieces
        wantMaxNum = i
    #해당 번호의 롤케이크 있으면 제공
    for j in range(start, end + 1):
        if cake[j] == 0:
            cake[j] = i
            count += 1
    received[i] = count

print(wantMaxNum, received.index(max(received)), end = "\n")