Skip to content

Conversation

@zaqquum
Copy link
Collaborator

@zaqquum zaqquum commented Jun 30, 2025

🌱WIL

이번 한 주의 소감을 작성해주세요!

  • 이번 주는 구현 문제 위주로 문제를 풀었다. 변수를 지정할때 어떤 자료형을 선택하면 더 효율적이고 직관적으로 구현할 수 있을 지 고민하게된 시간이었다. 주말에 일이 있어 PR 및 정리가 늦어져서 죄송합니다..ㅎ

🚀주간 목표 문제 수: 4개

푼 문제


백준 #1753. 최단경로: 그래프/ 골드4

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

  1. 입력 변수
  2. 다익스트라 함수 정의하기
  3. 시작점으로 부터 N 개의 정점까지 최단 거리 출력
    • INF 인 경우, string “INF” 출력

🚩제출한 코드

import sys
import heapq
input = sys.stdin.readline
INF = 1e12
V , E = map(int, input().split())
start = int(input())

graph = [[] for _ in range(V+1)]
for _ in range(E) : 
    a,b , c =map(int, input().split())
    graph[a].append((b,c))

distance = [INF]*(V+1)
# 다익스트라 함수 
def dijkstra(start) :
    q = []
    distance[start]=0 
    heapq.heappush(q,(0,start))
    while q : 
        # 2.경유지 뽑기 
        dist , now = heapq.heappop(q)
        # 3-1. 이미 처리한 경유지인 경우 -> 무시
        if distance[now] < dist : 
            continue
        #3-2. 현재 경유지에서 바로 갈 수 있는 노드 처리
        for t in graph[now]:
            cost = dist + t[1] # 경유지를 거친 start - t[0] 의 거리
            if cost < distance[t[0]] :  # 경유지 cost 가 더 작으면 업데이트 
                distance[t[0]] = cost 
                heapq.heappush(q, (cost , t[0]))
#4. 출력
dijkstra(start)
for node in range(1 , V+1) : 
    print("INF"if distance[node] >= INF else distance[node]  )

프로그래머스 #49993. 스킬트리: 구현 / lv2

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

  1. 변수 선언 및 초기화
  • set_s =: 선행 스킬 위치 포인터
  1. skill_trees의 단어 반복문으로 가능 단어 개수 확인
  2. "BACDE"의 단어 1개씩 반복문으로 탐색& 비교 (C)
    • if 리스트 skil에 없음 => continue
    • else 없음
      => 해당 글자가 skill 리스트 속 위치 번호 찾기(i=2)
      => if skill의 확인한 set_p과 같음 -> set+=1 , okay
      => set_p 보다 i가 뒤에 있을때 -> False

🚩제출한 코드

# skillset이 선행조건 충족 여부 확인 함수 
def check_skill(words , skill) :
    set_p = 0 ; 
    for c in words :  
        # 해당 스킬(c) 가 선행스킬 속 존재여부 파악 및 순번 확인
        idx = skill.find(c) 
        if idx < 0 :  # ok
            continue
        elif idx  == set_p :  # ok
            set_p +=1 
            continue
        else : 
            # 선행 스킬 순서 보다 더 이르게 w 스킬이 등장한 경우 
            return False
    return True

def solution(skill, skill_trees):
    answer = 0
    # 반복문올 skill_tree 속 선행스킬 조건에 충족하는 스킬 확인 및 개수 계산
    for skillset in skill_trees : 
        if check_skill(skillset , skill) :
            answer += 1                 
    
    return answer

프로그래머스 #17684. 3차_압축: 구현 / lv2

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?
1.길이 1 인 사전 초기화를 위해,

  • dict 형식의 변수 , dict 을 정의한다
  • ASCII 을 적용하여 A - Z 까지 값과 인덱스 값을 key : value 로 추가함
  1. 탐색할 입력 단어의 범위를 포인터 w_s 와 변수 w_l 로 초기화한다.

    • w_s = 0 : 입력 단어 중 탐색을 위한 일부 단어 시작 위치
    • w_l = 1 : 입력 단어 중 현재 탐색하는 글자 개수
  2. 입력 단어 전체를 반복문을 사용해 탐색하기 (w_s + w_l ≤ len(입력단어)

    1. 탐색 단어(word[w_s : w_s + w_l] 가 사전에 존재하면

      → 최대 길이 w 단어 인덱스(prev_idx)을 사전 속 인덱스 값으로 업데이트

      → continue

    2. 사전에 존재하지 않으면

      1. w+c 까지 단어 사전 등재하기
      2. 탐색 포인트 w_s와 w_l 을 다음 글자로 업데이트
      3. 출력 리스트 answer 에 바로 직전 사전 인덱스 값 pre_idx을 추가하기
  3. 마지막 사전 인덱스 출력 리스트 answer 추가하기(예외처리)

🚩제출한 코드

def solution(msg):
    answer = []
    # 1. 사전 초기기 
    dict = {}
    idx = 1 # 초기 사전 idx 
    for o in range(65, 65+ 26) :
        dict[chr(o)] = idx 
        idx += 1
    last_idx = idx-1
    #2. 입출력 단어 압축하기
    prev_idx = -1
    w_s = 0 ; w_l = 1
    while w_s+w_l <= len(msg) :  
        word = msg[w_s : w_s + w_l]
        idx = dict.get(word , -1 )
        if idx > -1 :  
            prev_idx = idx
            w_l += 1
            continue
        #사전에 없음
        else : 
          last_idx += 1
          dict[word] = last_idx # 사전 등록하기
          w_s = w_s + w_l - 1 #탐색 point 업데이트 
          w_l  = 1 # 단어 길이 초기화
          answer+= [prev_idx]# 이전 존재한 단어의 idx 는 출력 리스트에 추가
    answer+= [prev_idx] # 마지막 w 의 인덱스 출력

    
    return answer

프로그래머스 #42586. 기능개발: 구현 / lv2

정리한 링크: (바로가기)

🚩플로우 (선택)

코드를 풀이할 때 적었던 플로우가 있나요?

  1. 각 progress 에 대해 개발 완료 까지 추가 Days 계산하기

  2. 같은 배포일을 가진 서비스 개수 구하기

    1. deque 로 develop_day 보다 더 빠르게 종료되는 서비스들은 pop & 배포 서비스 개수 +1

    2. develop_day보다 더 개발완료 까지 오래 걸리는 서비스을 만날 경우 , 그 전 서비스 까지 한번에 배포 진행

      → 그전 서비스 개수를 정답 answer리스트에 추가

🚩제출한 코드

import math
from collections import deque
def solution(progresses, speeds):
    answer = []
    # 1. progress별로 추가 Day 구하기
    days= deque([0 for _ in range(len(progresses))])
    for i in range(len(progresses)) :
        days[i] = math.ceil((100 - progresses[i]) / speeds[i])
    # print(days)
    #2. 같은 배포일을 가진 서비스 개수들 구하기
    while days :
        tmp = 0
        develop_day = days[0] 
        # deque로 develop_days보다 더 빠르게 종료되는 서비스들은 pop 
        while days and develop_day >= days[0] : 
            tmp += 1 
            days.popleft()
        # 해당 develop_day보다 큰 경우,  그 전까지 서비스들이 같은 배포일 가짐 
        answer.append(tmp)
            
                
    return answer

@zaqquum zaqquum self-assigned this Jun 30, 2025
@zaqquum zaqquum merged commit 04216c4 into main Jun 30, 2025
@github-actions
Copy link

🔥2025-06 챌린지 진행 상황

👉 그래프

  • YoonYn9915: 5개 ✅
  • Mingguriguri: 4개 ❌
  • zaqquum: 6개 ✅

👉 구현

  • YoonYn9915: 2개 ❌
  • Mingguriguri: 1개 ❌
  • zaqquum: 5개 ✅

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants