프로그래머스6 프로그래머스 - 짝지어 제거하기 (핵심 : int(True)로 리턴하기) 💡문제 분석 요약baabaa 이런 문자가 있을 때, 앞에서부터 2개씩 짝지어지면 제거한다.모두 짝지어지면 1을 반환, 아니면 0을 반환한다.💡알고리즘 설계앞에서부터 stack에 하나씩 넣어주면서 체크하면 된다. sentence의 i번째와 stack의 -1번째가 같은 문자라면 삭제하는 방식이다.💡코드def solution(sent): sent = list(sent) stack = [] for c in sent: # 스택이 비어있으면 append if len(stack) == 0: stack.append(c) continue if stack[-1] == c: stack.pop() .. 2024. 9. 20. 프로그래머스 - 방문 길이 (핵심 : line 체크) 💡문제 분석 요약위 아래 왼쪽 오른쪽 명령어가 들어오면 해당 좌표로 이동한다.이동하지 못하는 위치라면, 즉 벗어났다면 해당 명령은 무시한다.이때 새로운 길에 대해서 체크한다. 갔던 길을 다시 가는 것은 count하지 않는다.💡알고리즘 설계처음엔 전형적인 DFS인줄 알았으나, 이미 주어진 명령어와 범위가 있어서 DFS까지는 안써도 되는 거로 인식했다.다만 왔던 길인지 알아야하므로 visited같은 역할을 하는 자료구조가 필요했고, 이는 set()을 사용했다.💡코드def operation(x, y, op): if op == "U": y += 1 elif op == "D": y -= 1 elif op == "R": x += 1 elif op ==.. 2024. 9. 11. Programmers 주식가격 💡문제 분석 요약주식가격이 담긴 배열 prices가 주어진다.각 원소별로 몇초간 떨어지지 않았는지 구한다. 1 2 3이라고 하면 순서대로 2초, 1초, 0초간 가격이 떨어지지 않은 것으로 본다.💡알고리즘 설계이중 for문을 사용해서 첫번째 원소를 나머지 원소와 쭉 비교하는데, 만약 가격이 떨어지는 순간이 나오면 break하고 그때까지의 time을 기록하면 된다고 생각했다. 그런데 이중 for문을 쓰면 시간이 초과될 것 같아서 해보고 오버되면 다르게 하려 했는데 오버되지 않았다.생각해보면, 일단 prices 길이가 10만이었기 때문에 이중for문이면 100억번 계산되는 건가 싶었다.그런데 중간에 자기보다 큰 수가 나오면 바로 break되기 때문에 저정도로 큰 계산이 되지는 않을 것으로 생각했다.💡코드.. 2024. 7. 14. 1966 프린터 큐, Programmers 프로세스 💡문제 분석 요약Queue에서 조금 바꿔서 우선순위를 보고 pop 여부를 결정한다.우선순위가 낮은데 앞에 있다면 맨 뒤로 돌아가게 되고, 자신이 제일 높은 우선순위라면 pop된다.💡알고리즘 설계딕셔너리, 우선순위큐 등을 살펴보았다.딕셔너리로 우선순위와 index를 매칭시켜볼까도 생각했는데, index 업데이트 하는 게 매우 번거로울 것 같아서 그만두었다.그리고 우선순위큐를 보았는데 아직은 잘 다루지 못하겠어서 제쳐두었다. 이는 나중에 다시 포스팅해야겠다.💡코드from collections import dequefor _ in range(int(input())): n, m = map(int, input().split()) files = deque(list(map(int, input().sp.. 2024. 7. 12. Programmers 다리를 지나는 트럭 💡문제 분석 요약트럭이 다리를 건너는데, 이때 (1)다리의 길이만큼만 트럭이 올라갈 수 있고, (2)weight 이하로만 트럭이 올라가야한다.모든 트럭이 건너는 최소시간을 구한다.💡알고리즘 설계Queue를 사용해야겠다고 생각했다.문제를 풀며 찾아보니 deque를 사용하는 것이 더 범용적인 것 같아 deque를 이용하였다.💡코드from collections import dequedef solution(bridge_length, weight, truck_weights): truck_weights = deque(truck_weights) # truck_weights를 deque으로 변환 onthebridge = deque([0] * bridge_length) # 다리 길이만큼 초기화하기 .. 2024. 7. 10. 대충 만든 자판 def solution(keymap, targets): d = dict() result = [] for i in keymap: for target in i: if target in d: # 값이 이미 있을 때 d[target] = min(i.index(target) + 1, d[target]) else: # 값을 처음 넣는 경우 d[target] = i.index(target) + 1 for i in targets: sum = 0 for target in i: if target not in d: sum =.. 2024. 5. 19. 이전 1 다음 반응형