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

[백준]230126 문제풀이

by stubborngastropod 2023. 1. 26.
728x90

1021. 회전하는 큐

def two(list_):
    a = list_.pop(0)
    list_.append(a)
    return list_

def three(list_):
    a = list_.pop(-1)
    list_.insert(0, a)
    return list_

N, M = map(int, input().split())
num_list = []
for i in range(1, N+1):
    num_list.append(i)
pop_list = list(map(int, input().split()))
twocount, threecount = 0, 0

while True:
    if len(pop_list) == 0:
        break
    n = pop_list.pop(0)
    if num_list.index(n) == 0:
        num_list.remove(n)
        N -= 1
    elif num_list.index(n) < (N / 2):
        for i in range(num_list.index(n)):
            two(num_list)
            twocount += 1
        num_list.remove(n)
        N -= 1
    elif num_list.index(n) >= (N / 2):
        for i in range(N - num_list.index(n)):
            three(num_list)
            threecount += 1
        num_list.remove(n)
        N -= 1

print(twocount + threecount)

큐 입문하는 문제... 리스트를 원형으로 놓고 돌린다고 생각하니 문제 풀기가 좀 더 수월해졌다

1018. 체스판 다시 칠하기

a, b = map(int, input().split())

newboard = []
for i in range(a):
    newboard.append(list(input()))

board_bw = []
count = 0

for i in range(8):
    board_bw.append([])
    count += 1
    for j in range(8):
        if count % 2 == 1:
            board_bw[i].append('B')
            count += 1
        else:
            board_bw[i].append('W')
            count += 1

changelist = []
for k in range(a - 7):
    for l in range(b - 7):
        bw = 0
        wb = 0
        for i in range(k, k+8):
            for j in range(l, l+8):
                if newboard[i][j] != board_bw[i-k][j-l]:
                    bw += 1
                else:
                    wb += 1
        if bw <= wb:
            changelist.append(bw)
        else:
            changelist.append(wb)

print(min(changelist))

문제 잘못 읽었다가 뻘짓한 문제.. 문제를 제대로 읽고 로직을 짜고 키보드에 손 올리자

1436. 영화감독 숌

N = int(input())
num = 1
count = 0
while count < N:
    num += 1
    if '666' in str(num):
        count += 1

print(num)

예시가 쉽게 나와서 쉽게 봤지만 생각보다 생각할 부분이 좀 있었다

1158. 요세푸스 문제

N, K = map(int, input().split())
num_list = []
new_list = []
for i in range(1, N + 1):
    num_list.append(i)

n = K

while len(num_list) > 2:
    new_list.append(num_list.pop(n-1))
    n += K - 1
    while n > len(num_list):
        n -= len(num_list)

if N == 1:
    print('<1>')

elif n % 2:
    new_list.append(num_list[0])
    new_list.append(num_list[1])

    print('<', end='')
    for i in new_list[:-1]:
        print(i, end=', ')
    print(new_list[-1], end='')
    print('>')

else:
    new_list.append(num_list[1])
    new_list.append(num_list[0])

    print('<', end = '')
    for i in new_list[:-1]:
        print(i, end = ', ')
    print(new_list[-1], end = '')
    print('>')

오늘의 시간 순삭 문제...

큐에서 pop을 활용하는 법에 대해 조금 감은 잡은 것 같다

지역 변수를 밑에까지 끌고 왔어야 하는데 머릿속에 완벽하게 정리돼있지 않고 코드가 너저분해서 계속 실수가 나오는 것 같다

728x90

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

[백준]230128-30 문제풀이  (0) 2023.01.30
[백준]230127 문제풀이  (0) 2023.01.30
[백준]230125 문제풀이  (0) 2023.01.25
[백준]230124 문제풀이  (0) 2023.01.24
[백준]230121 문제풀이  (2) 2023.01.21

댓글