콘솔창 & 윈도우창/코딩 테스트 53

프로그래머스 LV.2 더 맵게

이 문제는 간단한 예외처리 요하므로예외처리를 할 게 딱히 많지 않다.예외 처리의 경우1. scoville의 size()가 2보다 작은 경우에는 비교를 할 수 없다.그 경우에는 K보다 작은지만 체크해 준 뒤 -1을 반환하면 된다.전반적인 로직 간략 설명1. 가장 작은 스코빌 지수 + (두 번째로 작은 스코빌 지수 * 2)는힙을 사용한 우선순위 큐로 관리할 수 있다. 1. 작은 스코빌 지수는 자동으로 정렬이 되므로,top으로 읽어온 뒤 해당 값을 임시로 저장해둔다. 2. pop을 통해 작은 값을 꺼내 준뒤 그 2번째 값을 top으로 읽어온 뒤임시 저장 값에 += 두 번째 * 2 라는 로직을 추가해준다.이후 pop해주기 3. 임시 저장 값을 우선순위 큐에 넣어주면 자동 정렬된다. 위 과정을 조건이 만족할 때 ..

프로그래머스 LV.1 신규 아이디 추천

https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   해당 문제는 결국 규칙에 맞는 아이디를 추천하는 것이다.아이디 규칙은 다음과 같다. 아이디의 제한 사항은 다음과 같다.  string solution(string new_id) { string answer = ""; // 소문자 치환 // 레퍼런스는 포인터를 쓰는 것과 같음. for (char& ch : new_id) { ch = tolower(ch); } // 숫자, 빼기, 밑줄, 마침표 ..

프로그래머스 LV.2 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해시를 이용한 해결책 1. 종류별로 분류 2. 입지 않는 경우 (해당 종류를 쓰지 않는 경우) 3. 전체 조합 즉 해당 종류별로 의상의 개수를 곱해주면 된다.#include #include #include using namespace std; int solution(vector clothes) { int answer = 1; // 옷을 종류별로 구분 unordered_map m; for (vector clothe : clothes) { m[cl..

프로그래머스 LV.2 영어 끝말잇기

https://school.programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   해당 조건을 보면,return 처리의첫 번째 조건은 중복된 경우일 때두 번째 조건은 마지막 단어의 끝 알파벳과 현재 단어의 시작 알파벳이 다른 것일 때 따라서 return 처리의 if문 안에는 두 가지 조건을 걸러낼 수 있어야 한다. 중복된 경우가 조건이라면map이 적합하다.map은 중복을 허용하지 않기 때문이다. 그럼 단순 반복문을 통해 해당 조건에서 return 해야할 값을 구해보자. 틀린 사람이 몇 번째 사람인지는for문의 (i % n..

프로그래머스 LV.2 소수 찾기

https://school.programmers.co.kr/learn/courses/30/lessons/42839 제한사항은 다음과 같다.  예시로 1과 7의 숫자 카드가 주어지면,7하나 17하나, 71 이렇게 총 3개의 소수를 만들 수 있다. 마찬가지로0, 1, 1 의 숫자카드로는11, 101 이렇게 2개의 소수를 만들 수 있다. 그럼 이 문제를 어떻게 접근할 것인가? 1. 재귀함수를 활용하는 방법2. 반복문을 활용하는 방법 1. 재귀함수를 활용하는 방법재귀를 활용하면 다음과 같은 과정을 거친다.  재귀를 통해 모든 숫자 조합을 하나씩 만들어준다 STL의 set을 사용해서 중복되는 조합을 제거해준다. 지금 만들어진 숫자가 소수인지 판별한다. 이렇듯 소수인지 아닌지 판단하고 싶을 때가장 기본적으로 에라토..

프로그래머스 LV.1 완주하지 못한 선수

https://school.programmers.co.kr/learn/courses/30/lessons/42576 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 해당 문제는 크게 2가지 해법을 가진다.1. sort를 통한 단순 비교로 계산할 수 있는 경우2. 해쉬맵을 이용하여 통과한 선수를 제거하는 경우 sort는 비교적 쉽다.STL을 익숙하게 사용하기 위해 다음과 같이 코드를 짰다. #include #include #include using namespace std;string solution(vector participant, vector completion) { string answer = ..

프로그래머스 LV.2 피로도

https://school.programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr푸는 방법은 크게 2가지이다. 1. 배열의 모든 경우의 수를 싹 돌아보는 것2. DFS로 푸는 것이다. 1번째의 경우에는 next_permutation 알고리즘을 써서 모든 경우의 수를 탐색할 수 있다. next_permutation함수는 std의 algorithm 라이브러리 안에 내장된 함수이다.next_permutation함수는 해당 집합의 모든 순열을 구해준다. 예를 들어 {1,2,3}이라는 원소를 가진 집합이 있다면{1,2,3}{1,3,2..

프로그래머스 LV.2 점프와 순간이동

https://school.programmers.co.kr/learn/courses/30/lessons/12980 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 출발할 때 점프하는 것은 불가피하다 무조건 +1 0*2 = 0이니깐. 순간이동은 현재까지 온 거리의 2배이고 건전지를 소모하지 않기 때문에 최대한 많이 사용해야 한다. 순간이동을 했을 때 딱 맞아 떨어지지 않는 경우,즉 x*2 가 딱 맞아떨어지지 않는 경우에 ans += 1을 해주면 된다. #include using namespace std;int solution(int n){ int ans = 0; while (n > 0) {..

프로그래머스 LV.1 예산

https://school.programmers.co.kr/learn/courses/30/lessons/12982 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 단순히 현재 예산에서 최대한 뽑아 낼 수 있는 지원 가능한 부서를 세기 위해서 vector의 sort를 이용했다. #include #include #include #include #include using namespace std; int solution(vector d, int budget) { int answer = 0; sort(d.begin(), d.end()); for (int i = 0; i < d.size(); i++) { if (..