https://www.acmicpc.net/problem/1158 1158번: 요세푸스 문제 첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000) www.acmicpc.net 해설 : N명의 사람이 원을 이루면서 앉아있다고 할 때, 순서대로 K번째 사람을 제거한다. 모든 사람이 제거될 때까지 K번째 사람을 계속 제거한다. 이 때, 제거되는 사람들의 순서를 요세푸스 순열이라고 한다. N과 K가 주어질 때 요세푸스 순열을 찾는 문제이다. 풀이 : 사람이 원형으로 앉아있는 모습을 구현하기 위해 원형 큐를 사용하였다. 실제로 구현한 것은 아니지만 비슷한 기능을 하게끔 구현하였는데 방법은 다음과 같다. 1. K번 만큼 queue의 popleft()값을 append()해..
https://www.acmicpc.net/problem/1021 1021번: 회전하는 큐 첫째 줄에 큐의 크기 N과 뽑아내려고 하는 수의 개수 M이 주어진다. N은 50보다 작거나 같은 자연수이고, M은 N보다 작거나 같은 자연수이다. 둘째 줄에는 지민이가 뽑아내려고 하는 수의 위치가 www.acmicpc.net 해설 : 크기가 N인 큐에서 M개의 수를 뽑아내려고 한다. 뽑아내는 연산은 0번째 원소만 가능할 때, 큐를 왼쪽, 또는 오른쪽으로 한 칸씩 회전시키는 연산을 최소 몇 번 하여 뽑아내려는 값을 전부 뽑아낼 수 있는지 찾는 문제이다. 풀이 : 자료구조중 덱을 사용하여 구현하면 효율적으로 구현이 가능하다. 스택, 큐, 덱의 차이점은 아래 링크에 정리해 두었다. (스택, 큐, 덱이란? : https:..
https://programmers.co.kr/learn/courses/30/lessons/12909 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 programmers.co.kr 해설 : 괄호로 이루어진 문자열이 주어질 때, 이 문자열이 올바른 괄호 문자열인지 판단하는 문제이다. 풀이 : stack을 사용하는 가장 대표적인 문제라고 할 수 있다. stack에 괄호를 하나씩 넣으면서 짝이 맞으면 꺼내고 아니면 넣는다. 마지막에 stack에 원소가 있다면 올바르지 않고 없다면 올바른 괄호이다. 1..
https://programmers.co.kr/learn/courses/30/lessons/12973 코딩테스트 연습 - 짝지어 제거하기 짝지어 제거하기는, 알파벳 소문자로 이루어진 문자열을 가지고 시작합니다. 먼저 문자열에서 같은 알파벳이 2개 붙어 있는 짝을 찾습니다. 그다음, 그 둘을 제거한 뒤, 앞뒤로 문자열을 이어 붙 programmers.co.kr 해설 : 문자열 s가 주어질 때 연속된 문자 2개가 나올 경우 이를 짝지어 제거한다. 이 과정을 반복하면 최종적으로 문자열을 빈 문자열로 만들 수 있는지 찾는 문제이다. 풀이 : stack을 사용하면 쉽게 해결할 수 있는 문제이다. 문자열 s의 앞에서부터 stack에 넣으며, 넣을 때마다 stack의 top과 비교하고 같으면 stack에서 빼준다. ..
https://programmers.co.kr/learn/courses/30/lessons/42626 코딩테스트 연습 - 더 맵게 매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같 programmers.co.kr 해설 : 맵기 정도인 스코빌 지수들이 나열될 배열이 주어질 때 가장 낮은 두 스코빌지수를 섞어 새로운 스코빌 지수를 만든다. 이 때, 모든 스코빌 지수가 K 이상이 될 때까지 최소 횟수로 섞은 경우를 리턴하면 된다. 풀이 : heap을 사용하여 해결하면 된다. 처음 시도때는 두 min 값을 찾을 때, 매 번 새로 sort하여 구현하려 하였으나 시간초..
https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 해설 : 현재 개발진도가 담겨있는 배열과 하루마다 진척되는 작업률이 담겨있는 배열이 주어질 때 하루 하루가 지나 작업률이 100%가 되면 작업이 완료된다. 하지만 이 작업은 batch system의 구조로 되어있어 앞의 작업이 먼저 끝나야 뒤의 작업을 완료할 수 있다. 여기서 작업이 완료되는 날마다 몇 개의 작업들이 완료되는지 출력하면 된다. 풀이 : 모..
https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 해설 : 5x5의 2차원 배열로 이루어진 인형뽑기 게임에서 같은 인형을 2번 연속 뽑을경우 2점을 얻는 게임이다. 크레인에서 인형을 뽑는 순서가 주어질 때 얻을 수 있는 점수를 출력하면 된다. 풀이: stack을 사용하면 쉽게 해결할 수 있는 문제이다. 크레인이 인형을 뽑는 상황을 y좌표는 고정하며 x의 좌표가 5이상 또는 인형을 만날때까지 1씩 증가시켜주었고 만약 인형을 만났다면 이를 ..