목록Algorithm/Programmers 문제풀이 (36)
Dolphins의 HelloWorld
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42889 정답률 : 55.57% 풀이 정렬을 활용하는 법을 확인하는 문제로 보인다. 스테이지의 번호가 담긴 배열 stages를 내림차순으로 정렬한 후 반복문을 통해 만약 N이 5라면 stages에서 5의 갯수를 세고 총 도전자의 수는 누적해나가면서 실패율을 계산한 후 vector에 집어넣고 N이 0이 되기 전까지 이 과정을 반복하였다. 이런 과정을 거치고 나면 vector함수에 실패율,stage가 함께 저장되어있는데 실패율은 내림차순, stage는 오름차순으로 배열할 수 있도록 cmp함수를 따로 정의하여 마지막 처리를 해준후 return 해주었다.
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42888 정답률 : 59% 풀이 이 문제를 풀기위해 내가 쓴 핵심개념은 map과 queue이다. 일단 채팅창에 남는 메세지를 순서대로 저장하기위해 queue를 사용했으며 큐에는 Enter혹은 Leave와 uid를 함께 삽입하였다. 또한 map을 통해 uid에 대한 닉네임을 최신화시켜줌으로써 큐에서 하나씩 꺼낼 때 가장 최신화된 닉네임으로 메세지를 출력하도록 하였다. #include #include #include #include #include using namespace std; vector solution(vector record) { vector answer; queue q; map m; for..
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42898 풀이 기존의 동적계획법을 통해 푸는 문제와 거의 유사한 형태이다. 다만 주의할 점은 여기서 물에 잠긴 지역을 표시하는 (m,n)이 배열로 표시할 때는 n과 m을 바꿔서 arr[n][m] 이런식으로 사용해야한다는 점이다. 여기서 함정에 빠지지만 않는다면 어렵지않게 풀 수 있을것이다.
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42840?language=cpp 풀이 배열에 1번,2번,3번 사람이 찍는 패턴을 저장한 후 정답과 일일히 대조하면 된다. 오히려 마지막에 return하는 방식에 대해 고민을 했는데 cmp함수를 따로 생성해서 일단 점수 내림차순으로, 만약 점수가 같다면 사람번호가 오름차순으로 정렬되도록 하였고 정렬된 첫번째 사람부터 점수가 같은 사람은 순서대로 answer벡터에 삽입하여 return하였다.
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42747?language=cpp 풀이 먼저 인용횟수를 저장한 vector함수에 대해 내림차순으로 정렬하였다. 입출력 예시를 정렬했다 치면 {6, 5, 3, 1, 0}이 되고 for (int i = 0; i < citations.size(); i++) { if(citations[i] < i+1) return i;} 여기서 i+1은 인용된 논문의 수인데 이렇게 인용 횟수가 인용된 논문의 수보다 작아지는 순간이 H-Index보다 1 커지는 순간이며 고로 그 전의 index를 return하면 답을 도출해낼 수 있다. 마지막까지 조건문에 안걸리는 경우도 있는데 이 경우 답이 나올 경우의 수는 H-index가 ..
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42628 풀이 필요할 때마다 어쩔 때는 앞에서, 어쩔 때는 뒤에서 숫자를 꺼내야 하므로 deque라는 자료구조를 사용한다. 쉽게 생각해서 deque은 앞뒤로 뚫려있는 큐의 형태라고 생각하면 된다. 여기서 우선순위를 구현하기 위해 먼저 새로운 숫자를 맨 앞에 집어넣은뒤 bubble sort를 할 때 처럼 오름차순이 될 때 까지 새로 들어간 숫자를 뒤로 밀어주면서 조건을 만족시키도록 하였다. #include #include #include using namespace std; vector solution(vector arguments) { vector answer; deque deq; for (int i..
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42629 풀이 기본적으로 공급을 받을 때마다 stock을 누적시키는 방식으로 반복문을 작성하였다. 먼저 지금 가지고 있는 stock으로 버틸 수 있는 날 까지 받을 수 있는 공급을 우선순위 큐에 삽입시켰다. 이후 쌓여진 stock으로 k까지 버틸 수 없을 경우 우선순위에 있는 큐중에 가장 앞에있는것, 즉 가장 큰 공급을 받아 다시 반복문을 진행하였고 stock이 k이상이 될 때 반복문을 멈추고 이 때까지 받은 보급을 반환하도록 하였다.
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42626 풀이 우선순위 큐를 이해하고 사용할 줄 안다면 어렵지 않게 풀 수 있다. 이 문제를 풀기위해 먼저 priority_queue pq; 를 선언하였다. 가지고 있는 원소들에 대해 오름차순을 유지하는 우선순위 큐이다. 그래서 이 우선순위 큐의 맨 앞과 다음의 스코빌 지수를 추출한 후 K이상이 될 때까지 반복해서 섞는식으로 문제를 풀었다.
문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42587 풀이 처음에 queue q; priority_queue pq; 를 선언하였다. 그냥 큐에서 인자 하나는 우선순위, 하나는 위치를 저장해 놓았고 우선순위 큐에는 우선순위를 넣었는데 기존의 우선순위들을 내림차순으로 정렬하기 위함이다. 이렇게 되면 우선순위 큐의 가장 앞에는 우선순위가 가장 큰 것이 있으므로 만약 큐의 맨 앞에 있는것과 우선순위 큐의 맨 앞에있는 것이 같다면 큐의 인자를 pop하면 되고 같지 않다면 큐의 맨 뒤로 옮겨주면 된다. 그리고 우선순위가 같을 때 우리가 찾고자하는 것과 location이 같다면 인쇄되는 순서를 return해주면 되고 아니라면 인쇄순서를 증가시킨 후 과정을 ..