CS & Algorithm & Data Structure & C/C++
-
[C++] 백준-2309 일곱 난쟁이CS & Algorithm & Data Structure & C/C++ 2023. 8. 29. 22:37
아이디어? 이 문제의 아이디어는 "입력 받은 아홉 난쟁이의 키 중에서 두 난쟁이를 뺀 나머지 합이 100이 되는 경우를 찾는 것" 이다. 이를 위해서는 여러번 loop를 돌려야하는데, C++에는 next_permutation(순열)이라는 함수가 존재한다. [ next_permutation ] 만약 {0, 1, 2} 라는 배열이 있다고 했을 때 이를 순열을 구한다면 아래와 같은 순열을 얻을 수 있다. {0, 1, 2} {0, 2, 1} {1, 0, 2} {1, 2, 0} {2, 0 ,1} {2, 1, 0} 단, 순열을 사용할 때는 오름차순으로 정렬 된 값을 가진 컨테이너만 사용가능하다. 해결하는 방법은? 우선 전체 코드를 보여주고 각 코드블럭을 설명하겠다. #include using namespace st..
-
[C++] 백준-1037 약수CS & Algorithm & Data Structure & C/C++ 2023. 8. 16. 22:40
위 문제를 해결하기 위한 아이디어는 다음과 같다. 1. 주어진 약수 중에서 가장 작은 약수와 가장 큰 약수를 찾는다. 2. 가장 작은 약수와 가장 큰 약수를 곱한다. 즉, 주어진 약수들을 입력받아서 벡터에 저장한 후, 최소값과 최대값을 찾아서 곱해주면 답을 찾을 수 있다. Javascript에 min, max가 있듯이 C++에도 비슷한 것이 있다. min_element(), max_element()이다. #include using namespace std; int main() { int n; cin >> n; vector arr(n); for(int i=0; i> arr[i]; } // 약수 중 최소값, 최대값 찾기 int min = *min_element(arr.begin(), arr.end()); i..
-
[C++] 백준-1620 (나는야 포켓몬 마스터 이다솜)CS & Algorithm & Data Structure & C/C++ 2023. 8. 15. 13:30
문제는 쉽게 말해서, 문자열의 경우에는 번호를 말해야하고, 숫자의 경우에는 번호에 해당하는 문자를 출력하는 것이다. 해결 방법은 아래와 같다. #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int N, M; cin >> N >> M; unordered_map nameToNumber; vector numberToName(N + 1); for (int i = 1; i > name; nameToNumber[name] = i; numberToName[i] = name; } for (int i = 0; i > qu..
-
백준 10430번 : 나머지 (모듈러 연산)CS & Algorithm & Data Structure & C/C++ 2023. 8. 15. 07:43
※ 문제 풀기 전 알면 좋은 지식! - 모듈러 연산 (Modular Arithmetic) 모듈러 연산은 양수를 나눌 때 사용하는 특별한 방법이다. 주로 순환성을 모델링하는데 유용한데, 대표적인 순환성 계산이라고 한다면 시간이나 요일 등이 있을 것이다. 만약 "n일 후"의 요일을 구한다고 생각해보자. 이 때, 1은 월요일, 2는 화요일 ... 7은 일요일을 나타낸다. 그렇다면 "O요일의 n일 후는 무슨 요일"일까? 계산식은 아래와 같다. A mod B = R 10 mod 3 = 1 이는 나머지 값을 나타내는 것으로 mod 연산자를 사용하게 된다. 그래서 월요일의 8일 후라고 하면 (1 + 8) % 7 = 2가 되어서 2는 화요일을 의미한다. 금요일의 15일 후는 (5 + 15) % 7 = 6이 되고, 6은..
-
C++ 중복 없애기 (unique, erase)CS & Algorithm & Data Structure & C/C++ 2023. 7. 1. 19:21
중복을 없애고 순서대로 만드는 작업은 문제를 풀다보면 많이 사용되는 방법이다. C++에서 중복을 없애는 방법에 대해서 알아보자. unique라는 함수를 사용하게 되면 범위 안의 요소 중에서 앞에서부터 비교해가며 중복되는 요소를 제거하고, 중복되지 않은 것은 그대로 두게 된다. 그런데 unique만을 단독적으로 사용하게 되면 원하는 모습을 찾을 수 없다. 아래 예시를 보자. #include using namespace std; int main() { vector v{5, 5, 6, 6, 7, 3, 3, 2, 1, 1, 2, 2, 3, 4, 5, 8, 7, 8, 7, 9, 9}; auto it = unique(v.begin(), v.end()); for(int i : v) cout