C++

STL에 algorithm 헤더파일을 추가하면(#include ) 다음 아래 함수를 통해서 순열을 구할수가 있다. next_permutation 현재 나와 있는 수열에서 인자로 넘어간 범위에 해당하는 다음 순열을 구하고 true를 반환한다. 다음 순열이 없다면(다음에 나온 순열이 순서상 이전 순열보다 작다면) false를 반환. 함수를 실행하기 전, 무조건 오름차순 정렬이 되어있어야 한다. ex) 순열을 구하고 싶은 1-2-3-4의 배열이 있다고 가정을 하면 next_permutation의 함수를 사용하면 배열의 값들이 다음 순열인 1-2-4-3로 바뀌고 함수는 true를 반환합니다. #include #include #include using namespace std; int main(){ // 1부터 ..
https://programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 문제를 딱 보자마자 유니온 파인드 알고리즘이 생각났다. 풀고보니 유니온 파인드의 기본적인 문제이며, 부모 노드의 중복되지 않은 숫자의 개수는 몇 개인지 세면 되는 단순한 문제였다. 풀이 1 #include #include #include using namespace std; int parent[201]; int getParent(int x){ if(parent[x] == x) return x; re..
https://programmers.co.kr/learn/courses/30/lessons/49189 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 다익스트라의 기본 문제이다. 다익스트라 알고리즘을 활용하여 dist 값을 찾아낸 뒤, 가장 큰 값을 찾아 그 값과 일치하는 개수를 세면 된다. #include #include #include using namespace std; const int INF = 1e9; vector dist; vector edge[20001]; priority_queue pq; void dijkstra(int..
https://programmers.co.kr/learn/courses/30/lessons/12949 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 3중 for문에 익숙해지면 풀 수 있는 문제이다. #include #include using namespace std; vector solution(vector arr1, vector arr2) { vector answer; for(int i = 0; i < arr1.size(); i++){ vector v; for(int j = 0; j < arr2[0].size(); j++){ int sum =..
https://programmers.co.kr/learn/courses/30/lessons/87946 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 (0, 1, 2)(0, 2, 1)(1, 0, 2)(1, 2, 0)(2, 0, 1)(2, 1, 0) 다 돌아보면서 가장 많이 탐험할 수 있는 던전의 수를 세는 것이다. 그러므로, next_permutation 알고리즘과 dfs 알고리즘을 둘 다 쓸 수 있다. 풀이 1 (next_permutation) next_permutation 알고리즘을 쓰기 전에 먼저 정렬을 해준다. k의 수는 순열 ..
https://programmers.co.kr/learn/courses/30/lessons/12936 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 이 문제는 next_permutation 알고리즘으로 풀면 쉽게 풀리지만, 그렇게 해선 시간초과가 나는 문제이다. 해결 방법은 팩토리얼을 사용하여 각 자리의 수를 직접 구해야 된다. 풀이 1 #include #include using namespace std; long long facto(int n){ if(n == 1) return 1; return n * facto(n - 1); } void r..
https://programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 단순한 문제인데 생각보다 시간을 많이 뺏긴 문제이다. s가 1이 아닐 때 반복문을 계속 돌려주고, 0의 개수를 세며 전체 길이에서 0의 개수를 뺀 수를 다시 2진수로 만들면 된다. #include #include #include using namespace std; string Binary(int n){ string str = ""; while(n != 0){ str += to_string(n % ..
https://programmers.co.kr/learn/courses/30/lessons/42888 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 map을 활용한다면 쉽게 풀 수 있는 문제이다. record가 문자열로 들어왔기 때문에 편리하게 사용하기 위해 reco라는 이중벡터에 넣어줬다. map은 이미 들어온 key값이 있으면 value 예전 값이 사라지고, 업데이트 되는 식이기 때문에 Enter일때나 Chnage일 때 닉네임을 생성하거나, 업데이트 해주면 된다. 결과는 유저 아이디인 key값을 넣으면 업데이트 된 닉네임 value값이 나오..
https://programmers.co.kr/learn/courses/30/lessons/12981 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 과정 조건에 맞지 않는 인덱스를 찾는 것이 우선이다. 1. 이전에 등장했던 단어는 사용할 수 없습니다. map에 영어 단어를 넣고 다음 영어 단어를 넣었을 때, 카운트가 하나라도 됐다면 이전에 나왔던 것이라는 뜻이므로 틀린 인덱스를 찾을 수 있다. 2. 앞 사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 합니다. 이 방식으로 인덱스를 찾았으면 [번호, 차례] 형태로 return하면 된다. 만약 ..
https://programmers.co.kr/learn/courses/30/lessons/67257 풀이 과정 연산이 string 자료형으로 주어졌기 때문에, 반복문을 돌려 num 벡터에 숫자를 담고, op 벡터에 연산자를 담는다. 그리고 3가지 연산문자를 준비해 순열 알고리즘을 쓴다. 그 이유는 우선순위를 정하기 위해서다. 처음에는 *, +, - 순으로 우선순위가 정해져 계산을 하는데, 계산을 하는 도중에 원래 벡터들을 삭제하는 과정이 있기 때문에 num벡터와 op벡터를 순열이 시작될 때마다 temp 벡터로 만들어줘야한다. - 새로 알게된 점! max를 쓰려면 두 자료형이 맞아야 한다. 예를 들어 max(int, long long)이면 안 되고, max(long long, long long)이여야만 ..
박브레드
'C++' 태그의 글 목록