Skip to content

260113 : [BOJ 2590] 색종이#2300

Open
3veryDay wants to merge 1 commit intomainfrom
현서/2299/1

Hidden character warning

The head ref may contain hidden characters: "\ud604\uc11c/2299/1"
Open

260113 : [BOJ 2590] 색종이#2300
3veryDay wants to merge 1 commit intomainfrom
현서/2299/1

Conversation

@3veryDay
Copy link
Copy Markdown
Contributor

🚀 이슈 번호

Resolve: {#2299}

🧩 문제 해결

스스로 해결:

🔎 접근 과정

문제 해결을 위한 접근 방식을 설명해주세요.

  • 🔹 어떤 알고리즘을 사용했는지 : 노가다..?

  • 🔹 어떤 방식으로 접근했는지

  • 처음에는 그래프로 그리드를 표현해서 생각해보려고 했습니다. 우선순위큐에 현재 그리드에 들어간 변의 최대값과 그래프 상태를 저장하도록 하려고 했습니다. 그래서 추후 뺄 때, 가장 공간이 많은 칸부터 빼고, for x in range(6)을 돌면서 자리를 넣으려고 했는데... 공간복잡도, 시간 복잡도 둘다 말이 안될 것 같았습니다.

  • 일단, 무조건 새로운 색종이를 추가해야하는 상황과 있는 색종이로 해결할 수 있는 상황이 명확하게 나뉩니다.

  • 무조건 새로운 색종이 추가 : 33, 44, 55, 66, 그리고 상황에 따라 11, 22

  • 있는 색종이로 해결가능한 상황 : 11, 22

  • 이 두 케이스를 나눠서 생각하고, 남는 공간은 11이 들어갈 수 있는 공간의 개수, 22이 들어갈 수 있는 공간의 개수를 누적하면서 구하도록 했습니다.

  • 시간이 있다면 코드를 더 이쁘게 할 수 있는데, 이건 스터디 끝나고...ㅎㅎ

⏱️ 시간 복잡도

시간 복잡도 분석을 작성해주세요.
최악의 경우 수행 시간은 어느 정도인지 분석합니다.

  • Big-O 표기법: O(?)
  • 이유:

💻 구현 코드

import sys
input = sys.stdin.readline

nums = [0]
for _ in range(6) :
    nums.append(int(input()))
# 꽉 찬 개수
cnt = 0 
# cur[1] = 1*1 들어갈 수 있는 개수
# cur[2] = 2*2 들어갈 수 있는 개수
cur = [0,0, 0]

# sits where addition is 필수
for n in range(3, 7) :
    if n == 3 :
        cnt += nums[3] // 4
        nums[3] %= 4
        if nums[3] != 0 :
            cnt += 1
        if nums[3] == 1 :
            cur[1] += 7
            cur[2] += 5
        elif nums[3] == 2 :
            cur[1] += 6
            cur[2] += 3
        elif nums[3] == 3 :
            cur[1] += 5
            cur[2] += 1
    if n == 4 :
        cnt += nums[4]
        cur[2] += nums[4]*5
    if n == 5 :
        cnt += nums[5]
        cur[1] += nums[5]*11
    if n == 6 :
        cnt += nums[6]

 # sits where addition is not 필수       
for n in range(2, 0, -1) :
    if n == 2 :

        if cur[2] < nums[2] :
            nums[2] -= cur[2]
            cur[2] = 0
            cnt += (nums[2] // 9)
            nums[2] %= 9
            if nums[2] != 0 :
                cur[1] += (36 - 4*nums[2])
                cnt += 1
            
        else :
            cur[2] -= nums[2]
    if n == 1 :
        cur[1] += cur[2]*4
        cur[2] = 0
        if cur[1] < nums[1] :
            nums[1] -= cur[1]
            cur[1] = 0

            cnt += ((nums[1] // 36))
            if nums[1] % 36 != 0 :
                cnt += 1
        else :
            cur[1] -= nums[1]

print(cnt)

Implement a solution to count the number of boxes needed based on input sizes.
@3veryDay 3veryDay linked an issue Jan 12, 2026 that may be closed by this pull request
@3veryDay 3veryDay self-assigned this Jan 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

260113 : 코딩테스트

1 participant