알고리즘 78

백준 30804 c++ 풀이 (과일 탕후루)

https://www.acmicpc.net/problem/30804 핵심전략:탕후루 한 알 한 알를 고려하여 푼다. (자료구조 큐를 사용) 정답코드:#include #define nl '\n'using namespace std;typedef long long ll;int i, j;int type[10];int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); queue q; int n; cin >> n; int cnt = 0; int result = 0; int len = 0; while(n--){ int num; cin >> num; q.push(num); len ++; if(type[num] == 0){ cnt ++; ..

BOJ 문제풀이 2024.08.11

백준 28702 c++ 문제 풀이 (FizzBuzz)

https://www.acmicpc.net/problem/28702 핵심 전략:연속 된 세 수 중 최소 하나의 수는 Fizz, Buzz, FizzBuzz에 해당되지 않는다는 사실을 이용 핵심 전략 증명: Fizz, Bizz, FizzBizz는 15를 주기로 가지며 규칙성이 있다. 따라서 1부터 15 중에 3의 배수, 5의 배수에 해당하는 것을 표시하면 위와 같고 그 수들은 16~30과 위치가 동일하다. 또 이를 보면 연속 된 세 수가 모두 표시 돼있는 경우는 없기 때문에 세 수 모두 Fizz, Bizz, FizzBizz에 속해 있을 수 없다. 정답 코드:#include #define nl '\n'using namespace std;typedef long long ll;int i, j;int main(){..

BOJ 문제풀이 2024.08.10

백준 30802 c++ 문제 풀이 (웰컴 키트)

https://www.acmicpc.net/problem/30802 핵심 전략:몫, 나머지 연산을 활용 (처음 작성한 코드와 비교하여) 최적화를 한 부분:처음 구현할 때, 각 티셔츠 사이즈 별로 몫을 구하는 과정을 if문을 사용하여 나머지가 0일 때의 몫과 그 외의 상황에서의 몫을 구하였다.  (아래 코드 참고)for(i = 1; i 하지만 다른 사람의 코드를 보고 if else 문을 한 줄로 더 효율적인 코드로 대체할 수 있음을 배웠다. 나누려는 수( 위 코드의 경우 변수 t) - 1을 나눠지는 수에 더한 후 t로 나눗셈을 진행해주면 된다 (정답 코드 참고).  정답 코드:#include #define nl '\n'using namespace std;typedef long long ll;int i, j..

BOJ 문제풀이 2024.08.10

백준 1644번 c++ 풀이

전략: 1. 에라토스테네스의 체를 이용하여 소수를 판정하는 con 함수를 정의 하고, 투 포인터 알고리즘을 이용하여 연속합의 경우의 수를 반환하는 primesum 함수를 정의를 하고 적절히 사용한다. 코드: #include using namespace std; vector v; int N; int Primesum(){ int si = v.size(), l = 0, r = 0, sum = 0, result=0; while(l=N){ sum-=v[l]; l++; } else if(r>=si){ break; } else{ sum+= v[r]; r++; } } return result; } int con(int num){ if(num%2==0){ return false; } for(int i = 3; i>N; ..

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

백준 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

백준 1764번 c++ 풀이

안녕하세요 오늘은 이진탐색으로 문제를 풀어보겠습니다. 전략: 1. see(보지 못한 사람), hear(듣지 못한 사람), result 라는 이름의 string 타입의 vector를 선언여 see와 hear를 구분하여 input을 받는다. 2. see를 탐색할 예정이기 때문에 see를 sort해준다. 어느 이진탐색과 탐색을 실행하고, hear[i]와 see[mid]가 같으면 그 값을 result 뒤에 넣어준다. 3. 최종적으로 result의 길이를 출력하고, sort하여 사전순으로 출력한다. 코드: #include using namespace std; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, M; cin>>N>>M; vect..

BOJ 문제풀이 2021.08.17