본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

(81)
[pro] 프로그래머스 level2 169199 리코쳇 로봇 (Java) - BFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] GOAL에 도달하는 최소 이동 횟수를 반환하는 BFS 문제. 현재 위치에서 상, 하, 좌, 우 4 방향으로 슬라이딩해서 이동할 수 있다. 따라서 범위가 보드를 벗어나지 않고, 장애물 D에 도달하기 전까지 이동시킨다. 이동한 좌표 위치가 처음 위치와 같거나 이미 방문한 위치라면 다른 방향을 탐색하고, 그렇지 않다면 방문 처리 후 q에 넣는다. 큐에서 빼낸 좌표값이 G의 좌표값과 ..
[pro] 프로그래머스 level2 176962 과제 진행하기 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/176962# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. 과제 시작 시간 기준 오름차순 정렬해서 우선순위 큐에 넣어둔다. 2. 새로운 과제가 있다면 그 과제를 시작한다. 만약 현재시각+새로운 과제 소요 시간이 그 다음 과제 시작 시간보다 더 오래걸린다면 중간에 과제를 멈춰야 한다. 따라서 과제를 수행한 시간을 뺀 다음, stack에 멈춘 과제를 넣고, 새로운 과제를 시작한다. 현재 시간도 갱신해준다. 멈춘 과제를 다시 할 때,..
[pro] 프로그래머스 level2 172927 광물 캐기 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 광물은 순서대로 캐야하고, 하나의 곡괭이를 이용해 5개의 연속된 광물을 캐야 한다. 1. 5개씩 광물의 섹션을 묶어서 다이아 곡괭이, 철 곡괭이, 돌 곡괭이로 각각 캤을 경우의 피로도의 합을 섹션별로 저장해둔다. 2. 돌로 캤을 때 가장 피로도가 높은 순서대로 내림차순 정렬한다. 돌로 캤을 때 피로도가 높은 경우를 다이아 곡괭이로 캐야 함을 이해해야 한다. 즉, 이 내림차순 정..
[pro] 프로그래머스 level1 178871 달리기 경주 (Java) - HashMap [문제] https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] players와 callings 의 범위에 따라 2중 for문을 돌려 callings에 해당 하는 값을 찾아 swap 하면 시간초과가 발생한다. callings에 해당하는 값을 바로 찾기 위해 HashMap을 사용한다. HashMap에 선수들의 이름과 등수를 저장해놓는다. HashMap에 저장했으므로 불려진 선수의 등수를 O(1)에 찾을 수 있다. players 배열에서 이 선..
[pro] 프로그래머스 level2 요격 시스템 (Java) - 그리디 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/181188 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 단속카메라 풀이와 똑같다. [코드] import java.util.*; class Solution { public int solution(int[][] targets) { int answer = 0; //모든 폭격 미사일을 요격하기 위해 필요한 요격 미사일 수의 최솟값을 return //e 기준 오름차순 정렬 Arrays.sort(targets, (o1, o2)->(o1[1]-..
[pro] 프로그래머스 SQL level4 입양 시각 구하기(2) - GROUP BY, RECURSIVE CTE [문제] https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 0~23 의 모든 시각이 나타나야 한다. 이를 위해 재귀 쿼리 기법을 이용해서 가상 테이블을 만들어 둘 수 있다. 재귀 쿼리 기법 WITH RECURSIVE cte AS ( -- Non-Recursive 문장(첫번째 루프에서만 실행됨) SELECT 1 AS n UNION ALL -- (반드시 필요) -- Recursive 문장 SELECT n + 1 AS num FROM cte ..
[pro] 프로그래머스 SQL level4 년, 월, 성별 별 상품 구매 회원 수 구하기 - GROUP BY [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131532 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. 년, 월, 성별로 GROUP BY 하여 집계. GENDER가 NULL인 경우 제외. 2. 주의할 점은 같은 회원이 서로 다른 아이템을 동일한 년, 월에 구매할 경우 중복 집계로 처리 되어야 한다. 따라서 COUNT 시에 DISTINCT(U.USER_ID) 가 필수적임에 주의! [코드] SELECT YEAR(SALES_DATE) AS YEAR, MONTH(SALES_DATE..
[pro] 프로그래머스 SQL level4 특정 기간동안 대여 가능한 자동차들의 대여비용 구하기 - JOIN [문제] https://school.programmers.co.kr/learn/courses/30/lessons/157339 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. CAR_TYPE이 세단이거나 SUV 2. 11월 동안 대여 가능해야 한다. 3. DURATION_TYPE이 '30일 이상' 인 경우, 30일 동안의 대여비가 50만원 이상 200만원 미만이어야 한다. 계산한 후의 결과값인 FEE를 이용하려면 HAVING을 써야 한다. WHERE를 이용할 경우 FEE값이 계산되지 않아 이를 인식하지 못함에 주의! [코드] SELECT T1...