코딩 45

백준 4673번 c++ 풀이

전략: 1. 10001 길이의 배열을 bool타입으로 만들어주고 기본 값을 true로 설정해준다 2. 1부터 10001까지 반복하여 해당 숫자와 각자리수 값을 더한 값의 배열 해당 인덱스를 false로 설정해주고 만약 sum이 10000을 넘어간다면 다음 경우를 실행한다. 3. 배열을 확인하여 true값을 갖고 있는 인덱스를 출력한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); bool arr[10001]; for(int i= 0; i

BOJ 문제풀이 2021.10.10

백준 2193번 c++ 풀이

전략: 1. 3이상의 N에 대하여 N자리 이친수는 N-1자리 이친수 뒤에 0을 붙이는 것과, N-2자리 이친수 뒤에 01을 붙이는 경우이기 때문에 점화식은 pr(num) = pr(num-1) + pr(num-2)가 된다 코드: #include long long int arr[100]= {0, 1, 1, 2}; long long int pr(int num){ if(arr[num]){ return arr[num]; } arr[num] = pr(num-1) + pr(num-2); return arr[num]; } using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; cout

BOJ 문제풀이 2021.10.10

백준 10867번 c++ 풀이

안녕하세요 오늘은 중복 제외 정렬 문제를 풀어보겠습니다. 전략: 1. 먼저 정렬을 한 후, 출력할 때 전과 다른지 비교하여 같으면 출력하지 않고 같지 않으면 출력하고 x에 그 수를 대입한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; vector v(N); for(int i =0; i>v[i]; } sort(v.begin(), v.end()); int x= -1001; for(int i= 0; i

BOJ 문제풀이 2021.09.19

백준 1026번 c++ 풀이

안녕하세요 오늘은 수학원리를 이용한 문제를 풀어보겠습니다. 전략: 1. 첫번째 배열을 오름차순으로 정렬하고 두 번째 배열을 내림차순으로 정렬한다. 2. 대응하는 원소를 곱하여 result에 더해준다. 코드: #include using namespace std; int comp(int a, int b){ return a>b; } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N; cin>>N; vector in_1(N); vector in_2(N); for(int i = 0; i>in_1[i]; } for(int i = 0; i>in_2[i]; } sort(in_1.begin(), in_1.end()); sort(in_2.begin()..

BOJ 문제풀이 2021.09.19

백준 9461 c++ 풀이

안녕하세요 오늘은 동적 계획법 문제를 풀어볼 것입니다. 전략: 1. P(n)의 값을 n+1번째 원소로 하는 배열을 선언해주고, P(n) 함수를 선언해준다. 2. P(n) = P(n-2) + P(n-3)임을 이용하여 P(n)함수를 정의해준다. 코드: #include using namespace std; long long int arr[101] = {0, 1, 1, 1, 2, 2, 3, 4, 5, 7, 9, }; long long int P(int n){ if(arr[n]){ return arr[n]; } else{ arr[n] = P(n-2) + P(n-3); return arr[n]; } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); i..

BOJ 문제풀이 2021.08.31

백준 15649 c++

안녕하세요 오늘은 dfs을 이용하여 n개중에 순서 상관있이 m개의 숫자를 뽑는 모든 경우의 수를 출력하는 문제를 풀겠습니다. 전략: 1. dfs라는 return 값이 없는 함수를 만들어주고 cnt를 매개변수로 받아줍니다. 2. 1부터 N까지 반복하는 반복문을 만듭니다. 그 뒤, visited[i]가 false이면 i를 방문한 적이 없는 것이므로, visited[i]를 방문상태, 즉 true로 바꾸고 arr[cnt] = i를 해줌으로 cnt번째로 출력할 값을 i로 설정합니다. 3. 그리고 dfs(cnt+1)을 해줍니다. 그 과정이 끝나면 다시 전 노드로 와야하므로 visited[i]를 false로 만듭니다. 코드: #include using namespace std; int arr[9] = {0, }; b..

BOJ 문제풀이 2021.08.22

백준 17219 c++ 풀이

안녕하세요 오늘은 이진탐색을 이용하여 문제를 풀어보겠습니다. 전략: 1. string, string 을 페어로 하는 pair를 타입으로 하는 v라는 vecotr를 만들고, string 타입으로 x, y를 입력 받아서 각각 v[i].first, v[i].second에 대입해주고 이진탐색을 위해 sort를 해준다. 2. string 타입의 x라는 변수를 입력받고, 이진탐색을 진행하여 만약 x와 v[mid].first가 같으면 v[mid].second를 출력한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, M; cin>>N>>M; vector v(N); for(int i..

BOJ 문제풀이 2021.08.17