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

[백준]230203 문제풀이

by stubborngastropod 2023. 2. 4.
728x90

1181. 단어 정렬

N = int(input())
words = []
for i in range(N):
    words.append(input())

words = list(set(words))
words.sort()

lenmax = 0
for i in words:
    if len(i) > lenmax:
        lenmax = len(i)

length = 0
while True:
    length +=1
    if length > lenmax:
        break
    for i in words:
        if len(i) == length:
            print(i)

1259.팰린드롬수

while True:
    try:
        n = str(input())
        if n == '0':
            break
        else:
            wrong = 0
            if len(n) == 1:
                print('yes')
            else:
                for i in range(len(n)//2):
                    if n[i] != n[-i-1]:
                        wrong += 1
                        break
                if wrong:
                    print('no')
                else:
                    print('yes')
    except:
        break

1966. 프린터 큐

T = int(input())
for i in range(T):
    N, M = map(int, input().split())
    lst = list(map(int, input().split()))
    imp = 9
    cnt = 0
    breaker = True

    while breaker:
        for j in range(N):
            while imp not in lst:
                imp -= 1

            if lst[j] == imp and j == M:
                cnt += 1
                breaker = False
                break

            elif lst[j] == imp:
                lst[j] = 0
                cnt += 1

    print(cnt)

큐 연습에 도움이 된 문제. 꽤나 오래 고민하고 풀었는데, for문으로 한번 돌때마다 중요도를 낮추고 처음부터 탐색하는 게 아니라 같은 중요도 요소가 모두 제거되면 바로 그 다음 요소부터 카운트를 시작한다는 점이 조금 골치아팠다. 해서 for문으로 돌리면서 while문으로 계속 중요도가 같은 요소가 있는지 확인해줘야 했다.

11724. 연결 요소의 개수

N, M = map(int, input().split())
adj = []
cnt = 0

for i in range(N + 1):
    adj.append([0]*(N + 1))

for i in range(M):
    a, b = map(int, input().split())
    adj[a][b] = adj[b][a] = 1

visited = [False] * (N + 1)

def dfs(start, visited):
    visited[start] = True
    for i in range(1, N + 1):
        if adj[start][i] == 1 and not visited[i]:
            dfs(i, visited)

for i in range(1, N + 1):
    if visited[i] == False:
        dfs(i, visited)
        cnt += 1

print(cnt)

또 재귀와 리턴으로 고통받았던 문제. 개구리가 시킨대로 argument 최대한 적게 하면서 깔끔하게 짜보려고 노력했다. visited에서 false이면 dfs 쭉 돌리고 다음 넘어가고 하는 식으로 풀었다.

728x90

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

[백준]230206 문제풀이  (0) 2023.02.06
[백준]230204-05 문제풀이  (0) 2023.02.05
[백준]230202 문제풀이  (2) 2023.02.02
[백준]230131 문제풀이  (0) 2023.01.31
[백준]230128-30 문제풀이  (0) 2023.01.30

댓글