목록Python (138)
나의 개발일지
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/43163 DFS / BFS BFS 방식을 선택 from collections import deque def solution(begin, target, words): answer = 0 q = deque() q.append([begin, 0]) # 시작 단어와 깊이 V = [ 0 for i in range(len(words))] # 방문 배열 while q: word, cnt = q.popleft() if word == target: # 타겟과 같은 단어면 멈춤 answer = cnt break for i in range(len(words)): temp_cnt = 0 if V[i] == 0: ..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/17680#qna 2018 KAKAO BLIND RECRUITMENT 문제 LRU (Least Recently Used)를 구현해야 하는 문제 🔑 : 캐시 사이즈 = 4 현재 lru = [1, 2, 3, 4] 새로 들어온 도시가 2일 때 lru = [2, 3, 4, 2] 가 아닌 lru = [1, 3, 4, 2]가 되어야 한다. def solution(cacheSize, cities): answer = 0 lru = [] # 캐시 저장 리스트 for city in cities: # 도시이름을 쭉 방문 if city.lower() in lru: # 대소문자 구분 때문에 소문자로 변환 후 캐시에 ..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42885 그리디 문제 🔑 투포인터 사용 def solution(people, limit): answer = 0 people.sort() l, r = 0, len(people) - 1# 가장 가벼운 사람과, 가장 무거운 사람에 포인터를 둔다. while l
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92341 2022 KAKAO BLIND RECRUITMENT 문제 🔑 : 누적 주차 시간 구한 방법 기본적으로 시간은 05:34 일 때, 5*60 + 36 = 336 분으로 만든다. 같은 차량끼리, OUT 일 때 시간의 합 - IN 일 때 시간의 합 = 누적 주차 시간이 구해진다. 그래서 IN 이면은 시간을 분으로 변환해 준 후 빼주는 작업을 하고 OUT 이면 시간을 분으로 변환해 준 후 더해주는 작업을 했다. 추가로 마지막까지 나가지 않는 차량에 대해서는 요금 계산할 때 확인을 하고 (23시59분 = 1439분)을 더해주고 요금 계산을 진행 import math def solution(fe..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/92334 2022 KAKAO BLIND RECRUITMENT 문제 🔑 : set() 처음에는 중복 방지를 위해 체크하는 리스트를 생성하고 (신고자, 범죄자)의 형태로 체크 배열에 append 하고 not in으로 검사하는 방법을 선택했다. 정답은 나오지만 몇몇 케이스에서 시간 초과가 발생 set 자료구조의 특성(중복되는 값이 없음)을 이용해 set(report)를 해서 중복을 제거하는 방법 사용 시간 초과 해결! ⛔ set 사용 주의점 : 중복 제거하기에는 굉장히 편리하지만 자료의 순서가 뒤바뀐다. 그래서 이런 문제처럼 중복을 제거하지만 자료의 순서가 의미가 없을 때 사용하는 것을 추천, 아..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42842 🔑 완전 탐색, 약수 def solution(brown, yellow): 카펫크기 = brown + yellow # 카펫 전체 크기 약수 = [] # 약수들로만 계산하기 위해 약수 구함 # 가로, 세로의 최소 크기는 3이상이라서 3부터 ~ 3으로 나눈 몫까지 for i in range(3, 카펫크기 // 3 + 1): if 카펫크기 % i == 0: 약수.append(i) for i in range(len(약수)): 세로 = 약수[i] 가로 = 카펫크기 // 세로 if (가로 - 2) * (세로 - 2) == yellow: # 노란 카펫의 크기와 맞는지 return [가로, 세로]
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12981 끝 글자와 첫 글자가 같은지, 이미 나왔던 단어가 아닌지만 검사하면 어려울 것 없는 문제 def solution(n, words): 체크 = [words[0]] # 제일 처음 단어 끝글자 = words[0][-1] # 처음 1번이 말한 단어의 끝 글자 순서 = 2 # 처음 1번은 무조건 통과라서 2번부터 시작 턴 = 1 for i in range(1, len(words)): # 말한 단어의 앞 글자와 전에 단어의 끝 글자가 같고 말하지 않은 단어일 때 if words[i][0] == 끝글자 and words[i] not in 체크: 체크.append(words[i]) # 체크 배열에..
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12973 🔑 : 스택 문자열 길이만큼만 반복하면 끝 스택이 비었거나 현재 문자(s[i])와 스택의 마지막(stack[-1])이 다르면 append 현재 문자와 스택의 마지막 요소가 같으면 스택에서 빼낸다. 최종적으로 스택이 비어있으면 모든 문자열을 없앨 수 있다는 뜻 def solution(s): stack = [] for i in range(len(s)): if not stack: stack.append(s[i]) # 스택이 비어있다면 넣기 else: if s[i] == stack[-1]: # 스택 마지막 값과 s[i]가 같으면 빼냄 stack.pop() else: stack.append(..