문제 https://school.programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 개요 문제 조건에 '캐시 교체 알고리즘은 LRU (Least Recently Used)를 사용한다.'라고만 명시되어 있고, LRU 알고리즘에 대한 설명은 없어서 약간은 당황했다. 물론, 학교 수업에서 LRU 교체 알고리즘에 대해 배운 적이 있어서 알고는 있었지만, 이렇게 PS에 등장하니까 약간 벙쪘었다. LRU 교체 알고리즘은 가장 덜 최근에 사용된 것, 즉 가장 오랫동안 사용(혹은 참조)되..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 개요 문제 내용 자체는 이해하기 크게 어렵지 않았다. 처음에는 투포인터 방식으로 코드를 작성했다. 처음 구현했던 방식은 12개의 테스트 중 단 1개만 통과하고, 나머지는 다 틀렸다. 다른 방식을 고민하다가, want 길이와 number의 길이가 최대 10이고, discount의 길이는 최대 10만이기 때문에 부담 없이 중첩 for문을 사용해도 되겠다는 생각이 들었다. 그래서 굳이 복잡하게 ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 개요 문제를 잘못 이해한 채로 풀이를 시작해서 생각보다 굉장히 애를 먹은 문제이다. 한 번에 최대 2명씩 탈 수 있다는 문제 조건에 유의하자. 정답 코드 #include #include #include #include using namespace std; int solution(vector people, int limit) { int ans = 0; // 필요한 보트 개수 sort(peopl..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 개요 문제를 읽자마자 dp로 풀어야겠다는 생각이 바로 들었다. 뭔가 이전에 풀어본 계단 오르기 유형의 문제와 비슷하게 접근하면 될 것 같다는 생각으로 접근했다. 틀린 코드 (첫 제출) #include #include using namespace std; int solution(int n) { vector dp(n + 1); // i번째 칸까지 가는데 사용한 최소 건전지 사용량 dp[1] = ..
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12985 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 개요 이전에 풀어본 듯한 유형인 것 같기도 했고, 굉장히 쉬울 거라고 느꼈다. 머릿속으로 대략적인 풀이 방법이 떠오르긴 했으나, 가장 최적의 방법을 생각해내느라 시간이 좀 걸렸다. 제출 코드 #include using namespace std; int solution(int n, int a, int b) { int cnt = 1; int num = 2; while(num != n){ if (..
개요 문제가 정말 간단해서 금방 구현할 수 있었다. 직관적으로, 일단 n을 계속 2로 나눠가면서 n의 이진수 형태를 구해가는 과정에서 1의 개수를 구해놓는다. 그리고, n + 1부터 동일하게 2로 나눠가면서 1의 개수를 구하고, n의 이진수의 1의 개수와 동일한 값이 나올 때까지 반복문을 돌리는 방식을 생각했다. 정답 코드 #include #include using namespace std; int solution(int n) { int answer = 0; int curcnt = 0, tempn = n; while (tempn != 0) { int r = tempn % 2; tempn = tempn / 2; if (r == 1) curcnt++; } int nextn = n + 1; while (1) ..
개요 문제를 처음 읽었을 때, 문제를 이해하는 것은 어렵지 않았다. 굉장히 간단한 문제였다. 그러나, 문제를 이해한 후에, 어떤 방식으로 접근해야 하는지가 어려웠다. sequence의 길이
개요 솔직히 처음 문제를 보았을 때, 굉장히 쉽다고 느껴져서 코드를 순식간에 작성했다. 그런 다음에 코드를 제출했는데, 시간 초과로 인해 test case 4개를 실패하였다. 주의해야 할 점 players 시간 초과 O(NM) -> 시간 초과 따라서, O(N) 또는 O(M), 아니면 O(NlogN) 등의 풀이를 생각해야만 한다. 틀린 코드 #include #include #include using namespace std; vector solution(vector players, vector callings) { vector answer; int num = callings.size(); for (int i = 0; i < num; i++){ int idx = find(players.begin(), pla..