분류 전체보기 387

최소직사각형 - 프로그래머스, c++

- 문제 풀이 "완전 탐색"을 이용하는 문제였다. 먼저 완전 탐색에 대해 공부해보았다. 완전 탐색은 모든 경우의 수를 고려하는 조금은 무식한(?) 방법이다. 완전 탐색의 종류에는 1. 단순 Brute-Fore 방법 2. 비트마스크 3. 재귀 함수 4. 순열 5. BFS/DFS 정도가 있다. (참고: https://rebro.kr/59) - 코드 제출한 코드는 다음과 같다. 마냥 큰 수들끼리의 곱을 찾는 것이 아니기 때문에 가로와 세로의 값을 비교해 때에 가로보다 세로가 더 크다면 가로쪽에 더 큰 수를 몰아주도록 하는 코드가 필요했다. (세로 쪽에 더 큰 수를 몰아도 상관없음, 한 쪽에 더 큰 수를 몰아야 함) #include #include using namespace std; int solution(v..

프로그래머스 2023.01.28

가장 큰 수 - 프로그래머스, c++

- 문제 풀이 "정렬"을 사용하는 문제였다. 문제 풀이 전 #include 의 sort 함수에 대해 알아보겠다. 1. 배열 sort (오름차순) sort( arr, arr+N ); 2. vector sort (오름차순) sort( temp.begin(), temp.end() ); 3. vector sort (내림차순) sort( temp.begin(), temp.end(), greater() ); 4. vector sort시 compare 함수를 만들어서 그에 따라 정렬, 따로 bool형의 compare함수를 정의해야 함 sort( temp.begin(), temp.end(), compare ); 5. 연산자 오버로딩을 통한 sort - 코드 처음에 작성한 코드는 다음과 같다. 하지만 복잡도 문제로 실패..

프로그래머스 2023.01.28

프린터 - 프로그래머스, c++

- 문제 풀이 "우선순위 큐"를 사용하는 문제였다. 1. 우선순위 큐를 사용하려면 #include 를 한 후 priority_queue pq; 형태로 선언해주면 된다. 2. 그 외에도 문제에 필요한 큐 q, 변수들을 선언한다. 우선순위 큐(pq)는 하나의 int값만 있고 그 int값에 따라 sort되기 때문에 여러 변수를 넣지 못한다. 이 문제를 해결하기 위해 또 다른 큐(q)를 사용해야 했다. 이 큐(q)에는 vector "priorities"의 index와 value를 pair로 만든 것을 저장한다. 3. 우선순위 큐(pq)에는 vector "priorities"의 value를 넣어 우선순위대로 정렬되도록 한다. 4. while문을 통해 큐(q)가 비어있을 때까지 돌며 우선순위 큐(pq)에서 정렬된 ..

프로그래머스 2023.01.27

K번째수 - 프로그래머스, c++

- 문제 풀이 "정렬"을 사용하는 문제였다. sort함수를 사용하기 위해 #include 을 불러왔다. 이후 새로운 배열을 만들기 위한 vector arr만 매 for문 마다 선언하여 주어진 문제를 해결하면 되는 간단한 문제이다. - 코드 처음 작성한 풀이는 다음과 같다. ## 기억해야 할 것 ## 1. vector에 임의의 원소를 넣을 땐 push가 아니라 push_back()을 사용한다. 2. 배열 arr[]을 sort 할때는 sort(arr, arr+N); 의 형태이지만, vector arr을 sort 할때는 sort(arr.begin(), arr.end())를 사용한다. #include #include #include #include using namespace std; vector solutio..

프로그래머스 2023.01.18

기능개발 - 프로그래머스, c++

- 문제 풀이 "큐"를 사용하는 문제였다. 배포할 정도가 아니면 front값을 뒤로 넘기고 배포할 때가 됐으면 큐에서 그 숫자를 빼내준다. - 코드 하지만 내 풀이는 "큐"를 사용하진 않았다. 그냥 while, for 반복문을 사용해 값을 계산하고, push_back() 을 통해 계산한 값을 저장했다. (vector, while, for 만으로도 충분히 풀 수 있을 거라고 생각했다..) (사실 위에 #include 은 필요없을 듯 싶다.) 다음엔 큐를 사용한 풀이로도 시도해봐야겠다. #include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer; int num = ..

프로그래머스 2023.01.18

위장 - 프로그래머스, c++

- 문제 풀이 "해시"를 사용하는 문제였다. 주어진 string 배열을 인덱스 1부분은 "키", 인덱스 0부분은 "값"으로 정해 해시로 표현하면 간단하게 문제를 해결할 수 있었다. (특히 이렇게 해시로 표현하면 string으로 표현된 값을 int형으로 바꿔줄 수 있다는 것에 유리하다.) 1. 인덱스 1을 "키"로 설정해 해시테이블을 만들고, 2. for문을 통해 경우의 수를 계산하면 되는 문제이다. - 코드 → 처음 해시테이블에 값을 저장하는 코드의 for문을 쓸 때 cloth의 변수를 string으로 지정했고, 오류가 났다. 이렇게 자료형으로 오류가 나면 auto로 변수를 지정해주는 것이 좋다. → 해시테이블에 값을 저장할 때 vector의 인덱스[1]의 값을 "키"로 사용해 해시를 저장해야해서 tem..

프로그래머스 2023.01.13

전화번호 목록 - 프로그래머스, c++

- 문제 풀이 "해시"를 이용하는 문제이다. 앞선 해시 문제들과 같이 해시를 사용하기 위한 #include 을 불러온 후, 해시테이블에 값 저장, 해시테이블을 순회하며 주어진 문제를 해결한다. - 코드 처음에 내가 작성한 코드는 다음과 같다. #include #include #include using namespace std; bool solution(vector phone_book) { bool answer = true; unordered_map temp; //해시테이블에 값 저장 for (string phone : phone_book) { temp[phone]++; } //해시테이블 순회 for (auto pair : temp) { for(auto pair2 : temp) { if(pair.first..

프로그래머스 2023.01.12

폰켓몬 - 프로그래머스, c++

- 문제 풀이 "해시"를 사용하여 해결하는 문제이다. 1. 먼저 #include 을 불러와 해시를 사용할 수 있도록 했다. 2. 사용할 변수 N과 해시테이블을 선언한다. 3. vector 'nums'에 있는 값들을 for문을 통해 해시테이블에 저장한다. (해시테이블이기 때문에 "키"가 같으면 같은 공간에 "값"을 저장한다. 같은 "키"가 여러개 있을 수 없다.) 4. for문을 통해 해시테이블을 순회하며 실제 값을 갖는 "키"는 몇 개가 되는지 계산해 count 변수에 저장한다. 5. if - else문을 통해 N/2값과 count r값을 비교해 상황에 따라 적절한 값을 answer에 저장한다. - 코드 내가 작성한 코드는 아래와 같다. 일단 코드는 잘 돌아갔다. 그런데 해시테이블을 순회하며 실제 유의미..

프로그래머스 2023.01.12

완주하지 못한 선수 - 프로그래머스, C++

- 문제 풀이 오늘은 해시 문제를 풀어보았다. 수업시간에 "해시"라는 개념에 대해 명확히 짚고 간 적은 없어서 먼저 해시의 개념부터 공부했다. 해시(Hash)는 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값이다. 데이터를 저장하거나 데이터의 위치를 찾고자 할 때 해시를 사용하여 더 빠르게 자료 구조를 탐색, 삽입 등을 할 수 있다. !! c++에서의 해시테이블은 파이썬에서의 딕셔너리와 같이 "키"로 접근에 그에 연결된 "값"부분의 값을 변경할 수 있음 !! !! 해시테이블과 딕셔너리에서는 동일한 "키"를 여러개 저장할 수 없음, 키는 서로 같을 수 없음을 알기 !! - 코드 처음에 작성한 코드는 다음과 같다. 정확성에서는 100%의 점수를 받았지만 효율성에서는 실패의..

프로그래머스 2023.01.11