programmers 9

[Python] 단어 변환

문제 https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 처음 단어에서 목표하는 단어까지 주어진 단어들을 활용하여 최소 변환을 해야 하는 문제이다. (변환을 할 수 없다면 0 반환) 따라서 최단 경로 탐색에 적합한 BFS를 활용하여 문제를 해결하였다. 코드 과정은 다음과 같다. 처음 시작 단어와 0(단어 변환 횟수)을 queue에 넣는다. queue에서 맨 처음에 있는 단어와 횟수를 뽑는다. 주어진 단어들의 집합에서 아직 사용하지 않은 ..

[Python] 아이템 줍기

문제 https://school.programmers.co.kr/learn/courses/30/lessons/87694?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해결 과정 캐릭터 위치에서 아이템 위치까지의 최단 경로를 구하는 것이기 때문에 BFS를 이용하여 풀었다. 여기서 주어진 직사각형의 간격이 1일 수 있음에 주의해야 한다. 예) rectangle = [1, 1, 2, 4] 그렇게 되면 테두리가 아닌데도 캐릭터가 지나가게 되므로, 이 경우를 방지하기 위해 크기를 2배로 늘려주었다. (물론 직사각형을 그릴 지형, 캐릭..

[Java] 다리 위를 지나는 트럭

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42583 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 큐를 활용하여 푼 문제 트럭이 한 대씩 다리에 올라가게 된다. (다리 => 큐) 이때 다리에 트럭이 올라갈 자리가 있다면 1-1. 그리고 해당 트럭의 무게로 다리에 올라가도 된다면, 다리에 트럭을 추가해주고, 현재 다리의 무게를 기록한다. (시간 + 1) 1-2. 트럭의 무게 때문에 다리에 올라갈 수 없다면, 0을 다리에 추가해준다. (시간 + 1) 다리에 빈자리가 없다면, 다리의..

[Java] 완주하지 못한 선수

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 해시맵을 활용하면 간단히 풀 수 있는 문제였다. 처음엔 value를 Boolean 값으로 주려 했으나, 이름이 중복될 수 있다는 것을 깨닫고 횟수로 변경하였다. 해시맵에 참가자들의 이름을 key로, 이름 조회 횟수를 value로 넣어준다. (이름이 중복이 아닌 경우는 value가 1, 중복인 경우는 n이 됨) 해시맵에서 완주한 사람들의 value를 -1 해준다. 해시맵에서 valu..

[Java] 올바른 괄호

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 스택을 활용하여 풀었다. 여는 괄호(()라면 스택에 넣어준다. 닫는 괄호라면()) 스택 제일 위가 여는 괄호인지 확인한다. 여는 괄호라면 스택에서 꺼낸다. (짝이 맞으니 없애기) 닫는 괄호라면 올바른 괄호가 아니므로 false를 반환한다. 스택이 비었다면 true를 그렇지 않다면 올바른 괄호가 아니므로 false를 반환한다. 이 문제는 스택 / 큐 카테고리로 분류되어 있지만, 스택..

[Python] H-Index

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이과정 문제 이해가 잘 가지 않아 H-Index에 대해 찾아보게 되었고, H-Index 설명대로 구현하니 해결할 수 있었다. H-Index 구하는 법 : 연구자의 전체 논문을 피인용 순으로 정렬한 후, 논문의 순번과 피인용 횟수를 비교하여 피인용 횟수가 논문의 순번보다 작아지기 시작하는 직전의 순번이 연구자의 H-Index가 된다. 참고 링크 ➡︎ https://www.ibric.org/m..

[Python] 후보키

from itertools import combinations def solution(relation): relation_r = list(zip(*relation)) # 돌린거 col = len(relation_r) # 컬럼 개수 row = len(relation) # 행 개수 result = 0 # 유일성 만족하는 컬럼 1개 개수 not_candi = [] # 유일성 만족하지 못하는 컬럼 for i in range(col): if row == len(set(relation_r[i])): # 유일성을 만족하면 result += 1 # +1 else: not_candi.append(i) # 유일성을 만족하지 못하는 컬럼 리스트에 추가 make_candi = [] for i in range(2, len(no..

[Python] 셔틀버스

def solution(n, t, m, timetable): timetable.sort() # 타임테이블 정렬 crew_n = len(timetable) # 타임테이블 개수 for i in range(crew_n): # 시간표를 분으로 전환 hour, minutes = map(int, timetable[i].split(':')) timetable[i] = hour * 60 + minutes bus_time = 9 * 60 - t # 버스 처음 시간 p = 0 # 크루 포인터 for bus in range(1, n + 1): bus_time += t # 버스 시간 passenger = 0 # 탑승 크루 수 for crew in range(p, crew_n): # 안탄 크루들 태우기 if timetable[..

[Python] 뉴스 클러스터링

# 두글자씩 끊은 다중집합 만들기 def make_set(str): str_set = [] for i in range(len(str)-1): temp = str[i:i+2] # 두글자씩 끊기 if temp.isalpha(): # 글자에 기호나 숫자 없다면 str_set.append(temp) # 추가 return str_set def solution(str1, str2): str1 = str1.upper() # 대소문자 차이 무시하므로 둘다 대문자로 변환 str2 = str2.upper() str1_set = make_set(str1) # 각 문자열 다중집합으로 만들기 str2_set = make_set(str2) intersection = 0 # 교집합 계산 for i in str1_set: if i ..