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 |
댓글