본문 바로가기
알고리즘/백준

[백준]230116 문제풀이

by stubborngastropod 2023. 1. 16.
728x90

2309. 일곱 난쟁이

#1차 제출

height = []

for i in range(9):
    a = int(input())
    height.append(a)

for j in height:
    h = height
    h.remove(j)
    for k in h:
        if sum(height)-j-k == 100:
            height.remove(j)
            height.remove(k)
            break
    if len(height) == 7:
        break

height.sort()

for l in height:
    print(l)

원래는 이중for문에서 뺐을 때 100이 되는 두 개의 요소를 찾으면 remove 후 for문을 break할 생각이었는데, 아직 for문을 잘 못다루다보니 계속 오답이 났다.

#2차 제출

height = []

for i in range(9):
    a = int(input())
    height.append(a)

height.sort()

for j in height:
    for k in height:
        if sum(height)-j-k == 100:
            a, b = j, k

height.remove(a)
height.remove(b)

for l in height:
    print(l)

결국 for문 도중에는 리스트를 건드리지 않고, 두 요소를 찾은 뒤 마지막에 remove 해서 코드를 완성했다.

 

2231. 분해합

N = int(input())
ans = 0

for i in range(1,N):
    sum_ = 0
    for j in range(len(str(i))):
        sum_ += int(str(i)[j])
    if i + sum_ == N:
        ans = i
        break

print(ans)

형 변환에 계속 신경 쓰고, 탐색해서 답을 찾지 못했을 때는 for문 처음에서 변수를 초기화해줘야 한다는 걸 계속 생각하자.

 

3085. 사탕 게임

N = int(input())
l = []
anslist = []
countnum = 1

for i in range(N):
    l.append(list(map(str, input())))

#위쪽 사탕과 교환
for j in range(1, N):
    for k in range(N):
        if l[j][k] != l[j-1][k]:
            l[j][k], l[j-1][k] = l[j-1][k], l[j][k]
            # 이웃이랑 일치 여부
            for ii in range(len(l) - 1):
                countnum = 1
                for jj in range(len(l) - 1):
                    if l[ii][jj] == l[ii][jj + 1]:
                        countnum += 1
                    else:
                        anslist.append(countnum)
                        countnum = 1
                for ii in range(len(l) - 1):
                    for jj in range(len(l) - 1):
                        if l[ii][jj] == l[ii + 1][jj]:
                            countnum += 1
                        else:
                            anslist.append(countnum)
                            countnum = 1

#왼쪽 사탕과 교환
for j in range(N):
    for k in range(1, N):
        if l[j][k] != l[j][k-1]:
            l[j][k], l[j][k-1] = l[j][k-1], l[j][k]
            # 이웃이랑 일치 여부
            for ii in range(len(l) - 1):
                countnum = 1
                for jj in range(len(l) - 1):
                    if l[ii][jj] == l[ii][jj + 1]:
                        countnum += 1
                    else:
                        anslist.append(countnum)
                        countnum = 1
                for ii in range(len(l) - 1):
                    for jj in range(len(l) - 1):
                        if l[ii][jj] == l[ii + 1][jj]:
                            countnum += 1
                        else:
                            anslist.append(countnum)
                            countnum = 1

print(max(anslist))

파멸의 5중for문... 대충 어떤 식으로 구현해야 하는지 감은 오지만 깔끔하게 코드를 짜기가 어렵다. 시간초과도 나고, 예제 답은 맞추는데 제출하면 계속 오답이 뜬다. 머리 식히고 내일 다시 고민해보기...

728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준]230124 문제풀이  (0) 2023.01.24
[백준]230121 문제풀이  (2) 2023.01.21
[백준]230119 문제풀이  (0) 2023.01.20
[백준]230118 문제풀이  (0) 2023.01.18
[백준]230117 문제풀이  (0) 2023.01.17

댓글