[BOJ-연습] 8월 3주차. SILVER (V, I]

ParkJunHa·2023년 8월 19일

BOJ

목록 보기
71/85
post-thumbnail

🔔문제 소개


🔗연습 요약

연습 시간연습 문제 수카테고리
90 분6 문제그리디, 다이나믹 프로그래밍, 정렬, 그래프, 구현 중 랜덤 3 선택

🔗문제 요약

문제번호난이도시간 내 풀이 여부풀이 여부
가희와 3단 고음16162S4OO
이상한 하노이 탑15500S2바로가기
민겸 수21314S2바로가기
무한부스터17391S1바로가기
Boardle24939S3문제가 너무 노잼이라 pass
알고리즘 수업 - 깊이 우선 탐색 124479S2OO



📑풀이 노트


📌가희와 3단 고음

문제 요약

첫 항과 공차가 주어지고, NN만큼 숫자가 주어질 때, 가장 긴 수열의 길이를 출력하여라

풀이 요약

풀이 순서풀이 시간시도횟수카테고리
2H+582그리디

참가자들의 음계를 리스트로 입력받은 뒤, 수열의 첫 항부터 공차대로 증가시켜가며 같은 경우 res를 증가시킨다.

코드

  1. 메모리초과 코드
n, a, d = map(int, input().split())
note = list(map(int, input().split()))
l = max(note)
s = [i for i in range(a, l+1, d)]

j = 0
res = 0

for i in note:
    if j == l+1:
        break
    if i == s[j]:
        res += 1
        j += 1

print(res)
  1. 정답 코드
n, a, d = map(int, input().split())
note = list(map(int, input().split()))
l = max(note)
#s = [i for i in range(a, l+1, d)]

j = 0
res = 0
s = a
for i in note:
    if j == l+1:
        break
    
    if i == s:
        res += 1
        s += d

print(res)

회고

수열을 바로바로 구해 넘길 수 있음에도 굳이 리스트에 저장해 메모리초과를 받았고, 금방 수정할 수 있는 문제에 난이도도 그리 어렵지 않은 문제였음에도 불구하고 시간이 너무 많이 들어갔다.

📌알고리즘 수업 - 깊이 우선 탐색

문제 요약

첫 항과 공차가 주어지고, NN만큼 숫자가 주어질 때, 가장 긴 수열의 길이를 출력하여라

풀이 요약

풀이 순서풀이 시간시도횟수카테고리
1H+253그래프 이론

코드

import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline

n, m, r = map(int, input().split())
graph = [[] for _ in range(n + 1)]
visited = [0] * (n + 1)
count = 1

for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(v):
    global count
    visited[v] = count
    graph[v].sort()
    for g in graph[v]:
        if visited[g] == 0:
            count += 1
            dfs(g)

dfs(r)

for i in range(1, n + 1):
    print(visited[i])

회고

기본적인 DFS 문제, 처음 구현했을 때, 변수를 잘못선택해 메모리초과와 재귀 오류가 발생하였다 주의하자.



전체 회고


전체적으로 너무 오래걸린다. 실버 수준의 문제였음에도 불구하고 두 문제 밖에 못 푼것이 너무 아쉽다.
연습 또 연습하자

profile
PS린이

0개의 댓글