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")