본문 바로가기

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

(81)
[pro] 프로그래머스 level3 152995 인사고과 (Java) [문제] https://school.programmers.co.kr/learn/courses/30/lessons/152995 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 1. 원호가 인센티브를 받지 못하는 경우 -1을 반환한다. 2. 근무태도에 대해 내림차순 정렬 후 0~i-1 의 사원에 대해서 인센티브를 받지 못하는 사원을 걸러낸다. i번째 사원은 이미 0~i-1 번째 사원보다 근무태도 점수가 낮거나 같다. 근무태도 점수가 낮은데 동료평가 점수도 낮다면 인센티브를 받지 못하므로 제외하고, 그렇지 않은 경우만 map에 넣어준다. 3. 총점 순으..
[pro] 프로그래머스 level3 42628 이중우선순위큐 (Java) - heap [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42628 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 최대힙, 최소힙 두개를 만들어서 사용하면 쉽게 해결 가능하다. 두 개의 우선순위큐에서 모두 삭제되어야 하기 때문에 remove(Object o)를 이용한다. [코드] import java.util.*; class Solution { public int[] solution(String[] operations) { int[] answer = new int[2]; PriorityQue..
[pro] 프로그래머스 level3 92345 사라지는 발판 (Java) - DFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/92345 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 양 플레이어가 최적의 플레이를 해야 한다. 이길 수 있는 플레이어는 최대한 빨리 이겨야 하고, 질수밖에 없는 플레이어는 최대한 오래 버티다 져야 한다. 1. 현재 플레이어가 이동했을 때, 발판이 없으면 패배한다. 2. 상하좌우 방향으로 현재 플레이어가 이동 가능하다면 원래 있던 발판을 0으로 바꿔주고, DFS 재귀 호출을 통해 다음 플레이어로 턴을 넘긴다. 3. 플레이어의 상하좌..
[pro] 프로그래머스 level4 42891 무지의 먹방 라이브 (Java) - 시뮬레이션 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/42891 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] food_times의 모든 음식을 먹는데 걸리는 시간이 k초 이상이라면 네트워크 장애 발생 이후 다시 먹을 음식이 없으므로 -1을 반환하도록 한다. 우선순위큐를 이용하여 음식을 먹는데 걸리는 시간 오름차순으로 Food를 빼올 수 있게 한다. 시간이 가장 적게 걸리는 음식을 다 먹을 수 있다면 더 오래 걸리는 음식들 역시 그 시간동안 먹게되므로 초가 감소될 것이다. 이를 이용해서 ..
[pro] 프로그래머스 level4 43236 징검다리 (Java) - 이분탐색 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43236 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 지점과 지점 사이 거리 최솟값 중 가장 큰 값을 구해야 하므로 이를 이분탐색의 기준으로 이용할 수 있다. 지점과 지점 사이 거리 최솟값을 먼저 설정한 후, 이를 기준으로 돌을 제거해본다. 제거된 돌이 n개보다 많다면 간격 최솟값을 줄여(high = mid-1) 돌이 더 적게 제거되도록 해야 하고, n개 이하라면 answer를 갱신해준 후, 더 큰 간격도 가능한지 확인해보기 위해 ..
[pro] 프로그래머스 level3 43238 입국심사 (Java) - 이분탐색 [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 이전에 c++로 풀었던 적이 있다. (c++ 코드) 1. (전체 심사 가능 인원) += (전체 심사 시간)/(심사관 당 심사시간) 따라서 전체 심사 가능 인원이 n명보다 크거나 같으면 전체 심사 시간을 줄여볼 수 있다. 반대로 n명보다 작으면 전체 심사 시간을 늘려서 n명을 충족할 수 있도록 해야 한다. 2. n과 times의 범위가 모두 int 범위를 초과하므로 long으로 선..
[pro] 프로그래머스 level2 1844 게임 맵 최단거리 (Java) - BFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 대표적인 BFS 기본 문제. [코드] import java.util.*; class Solution { int n, m; boolean[][] visited; int ans = Integer.MAX_VALUE; int[] dr = {0, 0, -1, 1}; int[] dc = {-1, 1, 0, 0}; public int solution(int[][] maps) { int answ..
[pro] 프로그래머스 level2 43165 타겟 넘버 (Java) - DFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 단순한 dfs 문제. numbers 배열 숫자에 대해서 + 또는 - 두 가지 경우가 존재한다. [코드] class Solution { int ans; public int solution(int[] numbers, int target) { int answer = 0; //숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return dfs(0, numbers, 0, tar..