개발 이야기 안하는 개발자

알고리즘 공부 (2024_11_13) 본문

개발

알고리즘 공부 (2024_11_13)

07e 2024. 11. 13. 11:15
반응형

 

백준 2812 : 크게 만들기

값을 받아서 Stack으로 전에 있던 값을 비교하는 방식으로 문제를 풀었다.

놓친부분이 있었는데, K가 남는 경우가 있을 수도 있어서 K가 남으면 끝에서부터 빼기로 했다.

#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>
#include <iostream>
#include <fstream>
#include <stack>
#include <math.h>
#include <string>
#include <climits>

using namespace std;
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    string Num;
    int N;
    int K;

    cin >> N >> K;
    cin >> Num;

    stack<int> S;

    for (int i = 0; i < N; i++)
    {
        while (K > 0 && !S.empty() && S.top() < Num[i] - '0')
        {
            K--;
            S.pop();
        }

        S.push(Num[i] - '0');
    }
    while (K > 0)
    {
        K--;
        S.pop();
    }
    int Size = S.size();
    vector<int> V(Size);
    for (int i = Size - 1; i >= 0; i--)
    {
        V[i] = S.top();
        S.pop();
    }

    for (int i = 0; i < Size; i++)
    {
        cout << V[i];
    }
	return 0;
}

 

 


 

 

 

백준 10800 : 컬러볼

이건 문제도 다 이해하고 알고리즘까지 공책에 적었는데, 코드 짜다 보니까 꼬여서 길을 잃었던 문제.

똑같은 방식으로 푼 코드가 있길래 긁어옴

 

https://tnwlswkd.tistory.com/100

 

[백준]10800번. 컬러볼

[문제] www.acmicpc.net/problem/10800 10800번: 컬러볼 첫 줄에는 공의 개수를 나타내는 자연수 N이 주어진다(1 ≤ N ≤ 200,000). 다음 N개의 줄 중 i번째 줄에는 i번째 공의 색을 나타내는 자연수 Ci와 그 크기

tnwlswkd.tistory.com

 

 


 

 

 

백준 2891 : 카약과 강풍

이건 그냥 문제 그대로 풀었다.

조건이 안까다롭길래 그냥 ㅇㅇ

#include <stdio.h>
#include <algorithm>
#include <queue>
#include <vector>
#include <iostream>
#include <fstream>
#include <stack>
#include <math.h>
#include <string>
#include <climits>

using namespace std;
int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

    int N, S, R;
    int ans = 0;
    cin >> N >> S >> R;

    vector<int> V(N + 2);

    for (int i = 0; i < S; i++)
    {
        int a = 0;
        cin >> a;
        V[a] = -1;
    }

    for (int i = 0; i < R; i++)
    {
        int a = 0;
        cin >> a;

        if (V[a] == -1)
        {
            V[a] = 0;
        }
        else
        {
            V[a] = 1;
        }
    }

    for (int i = 1; i < N + 1; i++)
    {
        if (V[i] == -1)
        {
            if (V[i - 1] == 1)
            {
                V[i - 1] = 0;
                V[i] = 0;
            }
            else if (V[i + 1] == 1)
            {
                V[i + 1] = 0;
                V[i] = 0;
            }
            else
            {
                ans++;
            }
        }
    }

    cout << ans;


    return 0;
}

 

반응형

'개발' 카테고리의 다른 글

알고리즘 공부 (2024_11_15)  (1) 2024.11.15
알고리즘 공부 (2024_11_12)  (1) 2024.11.12
알고리즘 공부 (2024_11_8)  (3) 2024.11.08
알고리즘 공부 (2024_10_31)  (1) 2024.10.31
알고리즘 공부 (2024_10_30)  (0) 2024.10.30