File tree Expand file tree Collapse file tree 4 files changed +117
-0
lines changed
Expand file tree Collapse file tree 4 files changed +117
-0
lines changed Original file line number Diff line number Diff line change 1+ """
2+ ## 프로그래머스#17684. [3차]_압축: 구현 / lv2
3+ > 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/17684
4+ """
5+ def solution (msg ):
6+ answer = []
7+ # 1. 사전 초기기
8+ dict = {}
9+ idx = 1 # 초기 사전 idx
10+ for o in range (65 , 65 + 26 ) :
11+ dict [chr (o )] = idx
12+ idx += 1
13+ last_idx = idx - 1
14+ #2. 입출력 단어 압축하기
15+ prev_idx = - 1
16+ w_s = 0 ; w_l = 1
17+ while w_s + w_l <= len (msg ) :
18+ word = msg [w_s : w_s + w_l ]
19+ idx = dict .get (word , - 1 )
20+ if idx > - 1 :
21+ prev_idx = idx
22+ w_l += 1
23+ continue
24+ #사전에 없음
25+ else :
26+ last_idx += 1
27+ dict [word ] = last_idx # 사전 등록하기
28+ w_s = w_s + w_l - 1 #탐색 point 업데이트
29+ w_l = 1 # 단어 길이 초기화
30+ answer += [prev_idx ]# 이전 존재한 단어의 idx 는 출력 리스트에 추가
31+ answer += [prev_idx ] # 마지막 w 의 인덱스 출력
32+
33+
34+ return answer
Original file line number Diff line number Diff line change 1+ """
2+ ## 프로그래머스#42586. 기능개발 : 구현, 큐/lv2
3+ > 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42586
4+
5+ """
6+ import math
7+ from collections import deque
8+ def solution (progresses , speeds ):
9+ answer = []
10+ # 1. progress별로 추가 Day 구하기
11+ days = deque ([0 for _ in range (len (progresses ))])
12+ for i in range (len (progresses )) :
13+ days [i ] = math .ceil ((100 - progresses [i ]) / speeds [i ])
14+ # print(days)
15+ #2. 같은 배포일을 가진 서비스 개수들 구하기
16+ while days :
17+ tmp = 0
18+ develop_day = days [0 ]
19+ # deque로 develop_days보다 더 빠르게 종료되는 서비스들은 pop
20+ while days and develop_day >= days [0 ] :
21+ tmp += 1
22+ days .popleft ()
23+ # 해당 develop_day보다 큰 경우, 그 전까지 서비스들이 같은 배포일 가짐
24+ answer .append (tmp )
25+
26+
27+ return answer
Original file line number Diff line number Diff line change 1+
2+ # skillset이 선행조건 충족 여부 확인 함수
3+ def check_skill (words , skill ) :
4+ set_p = 0 ;
5+ for c in words :
6+ # 해당 스킬(c) 가 선행스킬 속 존재여부 파악 및 순번 확인
7+ idx = skill .find (c )
8+ if idx < 0 : # ok
9+ continue
10+ elif idx == set_p : # ok
11+ set_p += 1
12+ continue
13+ else :
14+ # 선행 스킬 순서 보다 더 이르게 w 스킬이 등장한 경우
15+ return False
16+ return True
17+
18+ def solution (skill , skill_trees ):
19+ answer = 0
20+ # 반복문올 skill_tree 속 선행스킬 조건에 충족하는 스킬 확인 및 개수 계산
21+ for skillset in skill_trees :
22+ if check_skill (skillset , skill ) :
23+ answer += 1
24+
25+ return answer
Original file line number Diff line number Diff line change 3939 visited [nx ] = visited [cx ] + 1
4040 q .append (nx )
4141print (visited [K ])
42+ import sys
43+ from collections import deque
44+ input = sys .stdin .readline
45+ MAX = 100000
46+ N , K = map (int , input ().split ())
47+ visited = [MAX ] * (MAX + 1 ) # 방문 여부
48+ # 2. BFS로 N-> K 의 모든 경로 찾기
49+ t = 0
50+ q = deque ([N , t ])
51+ visited [N ]= 0
52+
53+
54+ while q :
55+ cx = q .popleft ()
56+ ct = visited [cx ]
57+ for nx in (cx - 1 , cx + 1 , 2 * cx ) :
58+ if 0 <= nx < MAX :
59+ # 시간 업데이트
60+ if nx == 2 * cx :
61+ nt = ct
62+ else :
63+ nt = ct + 1
64+
65+ if visited [nx ] >= MAX : # 처음 도달
66+ q .append (nx )
67+ visited [nx ] = nt
68+ else : # 중복& 최단 거리일때
69+ if nt < visited [nx ] :
70+ visited [nx ] = nt
71+ q .append (nx )
72+ print (visited [K ])
You can’t perform that action at this time.
0 commit comments