[코드리뷰 스터디] 마지막 세션 후기

Jonie Kwon·2022년 5월 25일
0


프로그래머스 코드리뷰 스터디 9기 종료

마지막 세션을 마치며

3 ~ 4 레벨 문제가 라이브 코딩에서 한 단계씩 풀어서 설명해주시니 엄청 쉬운 문제로 느껴졌다. ㅠㅠ 코드만 보고 이해가 안간다고 포기하지 말고, 문제 규칙을 하나하나 쪼개서 정리해보는 연습을 해야겠다.
스터디 덕분에 코드 작성할 때 어떤 버릇이 있는지 알게 되었고 효율적인 코드를 작성하는데 아주 많은 도움이 되었다.👍🏻 5주라는 시간이 이렇게 빨리 지나가다니 아쉽다. (매주 라떼에 당첨되어서 더욱 더 아쉬운 ㅎㅎㅎ) 그동안 감사했습니다! 😘 얼른 취뽀해서 공덕역에서 커피 한잔 하러 가야 할텐데..🙏🏻

+메모리 관리에 대한 내용 :)

추가 리뷰 내용

풀어볼 문제

1. 큰 수 만들기

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42883

2주차 사전순 부분 문자열과 비슷한 유형의 문제여서 금방 풀었다 😎
다만 for문이 끝나고 나서 k가 0이 아닐 경우 숫자가 덜 지워 진 것 이므로 stack뒤의 숫자를 남은 k만큼 잘라 주어야 한다.

def solution(number, k):
    stack = []
    for num in number:
        while stack and stack[-1] < num and k > 0:
            stack.pop()
            k -= 1
        stack.append(num)
    if k != 0:
        stack = stack[:-k]
    return ''.join(stack)

2. 보석 쇼핑

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/67258

  • end가 배열의 마지막을 가리킬때까지 순회
  • 모든 종류의 보석이 포함되었을 경우, start를 하나씩 줄여가며 보석의 종류가 다 있는지 확인
  • 종류 하나가 사라질 때의 start, end를 answer에 추가
  • answer 중에서 가장 짧은 구간, 짧은 구간 중 앞에 있는 구간을 기준으로 정렬하여 출력
from collections import Counter
def solution(gems):
    gem_unique = len(set(gems))
    gems_lenth = len(gems) - 1
    answer = [[1, gems_lenth + 1]]
    start, end = 0, 0
    gem = Counter()
    gem[gems[0]] = 1
    while end <= gems_lenth:
        while len(gem) == gem_unique:
            gem[gems[start]] -= 1
            if gem[gems[start]] == 0:
                del gem[gems[start]]
                answer.append([start + 1, end + 1])
            start += 1

        if len(gem) < gem_unique:
            end += 1
            if end > gems_lenth:
                break
            gem[gems[end]] += 1
    answer.sort(key=lambda x: (x[1]-x[0], x[0]))
    return answer[0]

3. 섬 연결하기

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42861

4. 가장 먼 노드

문제 링크: https://programmers.co.kr/learn/courses/30/lessons/49189

  • 양방향 이므로 간선의 정보를 양방향으로 추가
  • distance : 처음 시작하는 1번 노드의 거리를 0으로, 나머지 노드는 inf로 초기화
  • 갈 수 있는 노드를 순회하면서 dist를 최단거리로 갱신해 줌
  • 최단거리가 가장 큰 노드들의 개수를 리턴
from collections import deque
def solution(n, edge):
    nodes = [[] for _ in range(n + 1)]
    for a, b in edge:
        nodes[a].append(b)
        nodes[b].append(a)

    distance = [int(1e9)] * (n + 1)
    distance[1] = 0
    q = deque([(1, 0)])
    while q:
        node, dist = q.popleft()
        for next in nodes[node]:
            if distance[next] > dist + 1:
                q.append((next, dist + 1))
                distance[next] = dist + 1
    target = max(distance[1:])

    return distance.count(target)

MySQL 참고

https://github.com/kciter/MySQLForNonDeveloper

profile
메모하는 습관

0개의 댓글