CS & Algorithm & Data Structure & C
-
백준 2606(바이러스) - Node.jsCS & Algorithm & Data Structure & C/Javascript 2024. 6. 27. 10:08
DFS(깊이우선탐색)가 너무 머리에 안 들어오다가 같은 문제를 계속 보다보니까 이제 뭔가 "아하!" 하는게 생겼다.아래는 백준 2606 바이러스 문제이다.물론 백준에서 직접 readFileSync해서 파일 불러오는 것부터 해보면 좋지만 나는 목적이 문제 해결 능력이다보니 겉치레는 치우고, 콘솔을 찍어볼 수 있도록 주로 JDoodle 같은 곳에서 문제를 풀어보는 편이다.그럼 문제를 살펴보자. 위 예제 입력을 보다시피 input은 아래와 같이 사용한다.const input = [ 7, 6, 1 2, 2 3, 1 5, 5 2, 5 6, 4 7] 그리고 문제를 풀어보자. 전체 해결 코드는 아래와 같다.function solution(input) { let an..
-
[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
-
[C언어] 다차원 배열 그리고 포인터 배열CS & Algorithm & Data Structure & C 2021. 11. 5. 16:33
2차원 배열은 Javascript를 할 때도 헷갈릴 수 있는 부분이다. 그러나 또 굉장히 많이 사용 되므로 잘 알아두어야 한다. 행렬 데이터를 표현 할 때, 그래프 알고리즘을 처리할 때 등 다양한데 우리가 흔히 볼 수 있는 것으로는 표 구조가 2차원 배열과 흡사하여 2차원 배열로 모델링 하기 쉽다고 할 수 있다. 2차원 배열이란? 2차원 배열은 바로 1차원 배열이 중첩되었다는 의미이다. 그래서 대괄호([])를 두번 연속해서 사용하여 표현하게 된다. 이를 표현하자면 아래와 같다. 자료형 배열이름[행][열] = {{값, 값}, {값, 값}} int a[10][10] // 10 x 10 2차원 배열 또한 일반적인 배열처럼 index 번호 0부터 시작하며 주로 2중 for문으로 많이 사용되어진다. A[0][0]..