분류 전체보기 387

큰 수 만들기 - 프로그래머스, c++

- 문제 풀이 "탐욕법"을 사용하는 문제였다. - 코드 처음에 제출한 코드는 다음과 같다. sort()함수로 정렬해 가장 큰 수부터 하나씩 뽑아 가장 큰 수를 만들었다. #include #include #include using namespace std; string solution(string number, int k) { // 변수 선언 string answer = ""; vector num; // string형의 number을 vector에 int형으로 넣기 for(int i=0; i=k; i--) { answer += to_string(num[i]); } // return return answer; } 하지만 이 문제에서는 주어진 문자열을 순차적으로 탐색하면서 주어진 수들의 순서를 바꾸지 않은 상..

프로그래머스 2023.02.07

체육복 - 프로그래머스, c++

- 문제 풀이 "탐욕법(Greedy)"를 이용하는 문제였다. 문제를 풀기 전 탐욕법, 그리디 알고리즘에 대해 공부했다. https://sectumsempra.tistory.com/88 탐욕 알고리즘이란 최적의 해를 구하는 데 사용되는 근사적인 방법으로, 여러 경우 중 하나를 결정해야 할 때마다 그 순간에 최적이라고 생각되는 것을 선택해 나가는 방식으로 진행하여 최종적인 해답에 도달한다. 그리디 알고리즘의 특징은 단순하고 빠르다는 것이다. 또 다른 특징은 이후의 경우는 생각하지 않고 현재의 상황에서 가장 최적의 값을 따라 간다는 것이다. 가장 최적화된 값보다 덜 효율적인 답을 내놓게 될 수도 있다. 따라서 그리디 알고리즘을 사용하려면 그리디 알고리즘을 사용해 문제를 해결하는 것이 가장 효율적인 지 그 근거..

프로그래머스 2023.02.06

피로도 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 사용해 푸는 문제였다. 완전 탐색 중에서도 이 문제는 단순 Brute-Fore 방법이나 순열로 해결할 수 도 있고 BFS를 구현해 해결할 수 도 있는 문제였다. 나는 전자의 방법을 선택했다. - 코드 처음에 내가 작성하여 제출한 코드는 다음과 같다. 하지만 결과는 논리 오류(?)와 같은 결과가 나왔다. 논리적인 오류를 해결해야 했다. "signal: segmentation fault (core dumped)" #include #include #include #include using namespace std; int solution(int k, vector dungeons) { int answer = -1; //0부터 dungeons.size()-1까지의 수로 만들 수 있는..

프로그래머스 2023.02.03

카펫 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 사용하는 문제였다. 1. (brown+ yellow)값을 숫자 두개의 곱으로 만들기 2. 3부터 시작하는 for문 만들며 탐색함, yellow가 1부터 시작하기 때문에 그걸 둘러싸려면 전체 높이는 최소 3 3. if문을 통해 조건 걸기, (가로*세로=sum) 이기 때문에 전체 가로 값은 나누어 떨어져야 함 4. 3의 조건을 만족한다면 전체 가로 값 계산하기 5. sum을 소인수분해할 수 있는 경우는 여러가지기 때문에 소인수분해로 구한 두 숫자가 red의 조건에 만족하는지 확인하기 - 코드 제출한 코드는 다음과 같다. #include #include using namespace std; vector solution(int brown, int yellow) { vector an..

프로그래머스 2023.02.02

더 맵게 - 프로그래머스, c++

- 문제 풀이 "힙(Heap)"을 사용하는 문제였다. 문제를 풀기 전 힙의 개념에 대해 알아보았다. https://doorrock.tistory.com/13 https://yabmoons.tistory.com/374 힙은 완전 이진 트리 자료구조로 왼쪽에서부터 아래로 빈 곳없이 값이 저장된다. Minheap은 부모 노드의 값은 자식 노드의 값보다 항상 작다. Maxheap은 부모 노드의 값은 자식 노드의 값보다 항상 크다. 따라서 숫자가 정렬되는 효과가 있다. (하지만 힙은 형제노드끼리는 값 비교 안 함, 오로지 부모-자식만) Minheap의 루트노드에는 최솟값이, Maxheap의 루트노드에는 최댓값이 있게 된다. 맨 끝에 값을 insert한 후 순서에 맞게 정렬한다. (말단부터 값을 비교해 나감) po..

프로그래머스 2023.02.01

소수 찾기 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 사용하는 문제였다. 순열 함수로 만든 모든 조합의 숫자들을 for문을 통해 소수인지 아닌지 판별하면된다. + 주어진 숫자로 만들 수 있는 모든 종류의 순열을 만들어주는 함수는 #include next_permutation() 이고, 모든 종류의 조합을 만들어주는 함수는 직접 만들어야 한다. 여기서는 조합을 만들어주는 함수를 사용해야 하므로 따로 함수 선언해주어야 한다. - 코드 내가 작성해 제출한 코드는 다음과 같으나 성공하지 못했다. #include #include #include #include using namespace std; int solution(string numbers) { //필요한 변수 선언 int answer = 0; vector num(numbers...

프로그래머스 2023.01.31

모의고사 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 사용하는 문제였다. for문을 통해 점수를 하나씩 탐색하며 맞혔다면 count해주어야 했다. - 코드 + 나는 1차원벡터를 3개 만들어 각 학생의 답을 저장했는데, vector s_answer { {1,2,3,4,5}, {2,1,...}, {3,3,...}}; 2차원 벡터의 형태로 저장하는 게 더 깔끔한 것 같다. + 나는 맞힌 문제 개수가 들어있는 벡터에서 최댓값을 찾을 때 for문으로 탐색하는 방법을 사용했는데, *max_element()함수를 통해 간단하게 구할 수 있다. 제출한 코드는 다음과 같다. #include #include #include using namespace std; vector solution(vector answers) { vector answer..

프로그래머스 2023.01.30