STUDY/코딩테스트 연습(PS) 22

백준/5430번, AC/C++

백준 5430번 AC c++ 문제풀이 문제 설명 배열이 주어지면 해당 배열을 뒤집거나(R), 처음 숫자를 버리는 연산(D)을 시행한 뒤 최종 결과를 출력한다. 주의할 점 실제로 배열을 뒤집을 생각을 하면 시간초과의 길로 빠지게 된다. 배열의 실제 순서는 상관 없다는 것을 깨달으면 문제가 비교적 쉽게 풀린다. c++의 string에는 split 함수가 없기 때문에 직접 구현하거나, find를 써야 한다. 입력형태가 독특하다는 점을 유의해야 한다. 생각의 흐름 배열을 매번 뒤집으면 시간 초과가 날테니까 덱을 써서 현재 진행 방향에 따라 front나 back으로 다르게 접근하는 게 좋겠다. 비어있는데 에러인 경우나 진행 방향은 bool형 변수를 두어서 확인해야겠네 split 없는데 직접 구현하기 귀찮다.. 근..

백준 10844번, '쉬운 계단 수' 풀이과정 및 코드 / C++, Python

백준 10844번 '쉬운 계단 수' 풀이과정 및 코드 문제 설명 수의 길이 N이 주어지면, 해당 길이의 수 중에서 인접한 모든 자리 수의 차이가 1이 나는 계단 수의 개수를 구하여 1,000,000,000으로 나눈 나머지를 반환한다. N은 1보다 크거나 같고 100보다 작거나 같다. 주의할 점 계단 수는 '인접한 모든 자리수의 차이가 1 이하인 수'가 아니라, '인접한 모든 자리수의 차이가 1인 수'라는 점. 동일한 숫자나 2 이상 차이가 나는 숫자는 연달아서 올 수 없다. 맨 마지막 숫자가 무엇이냐에 따라서 자리수가 하나 늘었을 때 올 수 있는 숫자의 개수가 달라진다는 점. -> 예를 들어 마지막 숫자가 9라면 그 뒤에는 무조건 8 밖에 올 수 없고, 마지막 ..

프로그래머스 level 2 '124 나라의 숫자' C++ 풀이 과정 및 코드

프로그래머스 level02 '124 나라의 숫자' C++ 풀이 과정 및 코드 문제 설명 기존의 10진법으로 표현된 자연수가 주어지면, 1과 2, 4만을 사용한 숫자 체계로 변환하여 string값으로 리턴시키는 문제이다. 주의할 점 1,2,4라는 연속적이지 않은 숫자로 구성된 체계 0부터가 아닌, 자연수만 존재함 string값으로 리턴함 n의 최대 범위 생각의 흐름 3개의 숫자로 이루어져 있으니 3으로 나눈 몫과 나머지를 사용해야겠다. n을 3으로 나눈 나머지를 이용해 124로 변환한 숫자의 마지막 자리 값은 구할 수 있었지만, n의 나머지 숫자들을 자릿수마다 하나하나 구하는 방법을 생각해보니, 3의 거듭제곱의 합을 구해야 하는 방법밖에는 생각이 나지 않았다.(자릿수가 늘어나는 기준은 3, ..

백준/1620번, 포켓몬 마스터/C++

백준 1620번 '나는야 포켓몬 마스터 이다솜' 문제 설명 포켓몬의 번호와 포켓몬의 이름을 저장해둔 후, 문제에서 포켓몬의 이름이 주어지면 그 포켓몬의 번호를 출력하고, 포켓몬의 번호가 주어지면 이름을 출력해야 하는 문제이다. 첫 번째 줄에는 포켓몬의 개수 N과 맞추어야 하는 문제 개수 M이 주어지고, 이어서 N줄에 걸쳐 1번부터 N번까지의 포켓몬 이름이 주어진다. 그 후에는 이어서 M줄에 걸쳐 포켓몬의 이름 혹은 번호가 주어진다. 주의할 점 포켓몬 개수의 최대범위가 10만이기 때문에, 시간초과에 유의해야 한다. 포켓몬 번호는 1번부터 N번까지이다. 코드 #include #include using namespace std; map s; map s2; int N, M; int main(voi..

백준/13458번, 시험 감독(연산)/C++

시험장마다 한 명의 총감독관과 여러 명의 부감독관이 있을 수 있을 때, 응시생을 모두 감시하는 데에 필요한 최소 감독관 수를 구하는 간단한 연산 문제이다. 주의할 점 1. 빼기의 반복은 나누기이다. 2. 최대범위를 고려하여 데이터타입을 정하자. #include #include #define MAX 1000000 using namespace std; int N, B, C; int p[MAX]; int main(void) { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int x = 0; long long sum = 0; cin >> N; for (int i = 0; i > p[i]; } cin >> B >..

프로그래머스/H-Index(정렬)/C++ ; 정렬 없이 풀기, 정렬하여 풀기

즉, citations 배열에서 h 이상의 값을 가지는 원소가 h개 이상인 h의 최대값을 찾는 것이다. 문제 설명이 다소 혼란스러워서 문제 자체를 이해하는 데에 어려움을 겪는 사람이 많아보였다. 나도 문제를 읽으면 읽을수록 헷갈렸기에, 주의할 점과 테스트 케이스를 자세히 적어보았다. 주의해야 할 점 1. h가 반드시 citations 배열의 원소값이어야 하는 것은 아니다. -> citations = [10, 9, 4, 1, 1], answer = 3 2. h 이상의 값을 가지는 원소가 h개여야 하는 것은 아니다. -> citations = [0, 1, 1], answer = 1 3. h 값은 citations 배열의 size 값보다 큰 값일 수 없다. -> citations = [31,66], answe..

프로그래머스/큰 수 만들기(Greedy)/C++

다양한 방법으로 풀 수 있는데, 나는 큐를 사용해서 풀었다. 주의할 점 : 같은 숫자들이 있는 경우에도 반드시 k개의 수를 제거하여 가장 큰 수를 만들어야 한다는 점. 작은 수를 골라서 제거하는 방식으로는 틀리기 쉽다. #include #include #include #include using namespace std; /* 처음에 사용한 직접 정의한 최대값 인덱스 찾기 함수 int find_max_index(string &n, int start, int end){ int max = -1; int max_index = 0; for(int i = start; i 0){ index = max_element(number.begin()+start+1,number.begin()+start+2+k) - number..

프로그래머스/크레인 인형뽑기 게임/2019 카카오 개발자 겨울 인턴십/C++

문제 설명 : 왼쪽의 보드에서 각 컬럼의 맨 위에 있는 인형을 집어 오른쪽의 바구니로 옮기는 과정을 실시한다. 오른쪽 바구니의 격자 아래칸부터 차곡차곡 쌓이게 된다. 이때 오른쪽 바구니에서 같은 모양이 두 개가 겹쳐지면 두 인형은 떠뜨려지면서 사라진다. 인형이 집어지지 않는 경우는 없고, 인형이 없는 곳에서 크레인 작동시키는 경우에는 아무 일도 일어나지 않는다. 오른쪽의 바구니는 모든 인형이 들어갈 수 있을 만큼 충분히 크다. 오른쪽의 바구니를 스택으로 구현하여 스택의 top 원소와 집어넣고자 하는 원소의 값이 일치하면 스택을 pop하는 방식으로 풀면 된다. 스택을 이용하는 간단한 문제. #include #include #include using namespace std; int push(stack &s..

프로그래머스/더 맵게(힙 heap)/C++

힙을 사용하여 문제를 해결하는 능력만 있다면 풀 수 있는 문제. 주의할 점 : 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우를 처리해야 한다는 것. 모두 섞어서 하나의 스코빌 지수로 합하였는데도 K 이상이 되지 않는 경우를 처리해주어야 함. #include #include #include using namespace std; int solution(vector scoville, int K) { priority_queue pq; int answer = 0; for(int i = 0; i= K) break; // 조건 충족. 성공. if(pq.empty()) { // 힙이 빈 경우. 섞어서 새로운 스코빌 지수 만들 수 없음. 실패. answer = -1; break; } int second = ..