JXNVCE ALGO-LOG YouJin Jung

BOJ-9375

패션왕 신해빈…해빈이는 패션에 매우 민감해서 한번 입었던 옷들의 조합을 절대 다시 입지 않는다…각 테스트 케이스에 대해 해빈이가 알몸이 아닌 상태로 의상을 입을 수 있는 경우를 출력하시오… 거참 문제 한번 상황이 웃기네…

/******************************************************************************

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.

*******************************************************************************/
#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#include <utility>

using namespace std;

int fact(int n) {
    int i,j;
    if(n==1) return n;
    else {
        i = n;
        for(j=n-1; j>0; j--) i *= j;
        return i;
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int n;
    cin >> n;
    if (n<0 || n>30) return 0;
    vector<pair<string, string>> fashion;
    for (int i=0; i<n; i++) {
        int num;
        cin >> num;
        for (int j=0; j<num; j++) {
            string a,b;
            scanf("%s %s", a,b);
            // fashion.push_back(input);
            pair<string, string> last = *(fashion.end());
            if (!last.second.compare(b)) {
                pair<string, string> input = make_pair(a,b);
                fashion.push_back(input);
            }
            if(j==num-1) {
                int size = fashion.size();
                cout << size << "\n";
                cout << fact(size) << "\n";
            }
            fashion.clear();
        }
    }
}

이상하게 오늘 vscode가 느리고 버벅거린다… 터미널도 맛탱이가 나갔다… 그래서 gdb online을 썼더니 더 느리고 복잡하다…. 머리 아파….. 얼른 자야겠다…

BOJ-2630

정답률이 무려 70%가 넘는 분할정복 문제! 사실 난 쉽지 않았는데 왜 이렇게 다들 잘 하는거야…. 😨😨

#include <iostream>

using namespace std;

int map[129][129] = {0};
int white, blue = 0;

void solve(int x, int y, int size) {
    int check = map[x][y];
    for (int i=x; i<x+size; i++)
        for (int j=y; j<y+size; j++) {
            if (check == 0 && map[i][j] == 1) check = 2;
            if (check == 1 && map[i][j] == 0) check = 2;
            if (check == 2) {
                solve(x, y, size/2);
                solve(x, y+size/2, size/2);
                solve(x+size/2, y, size/2);
                solve(x+size/2, y+size/2, size/2);
                return;
            }
        }
    if (check == 0) white+=1;
    if (check == 1) blue +=1;    
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int N; cin >> N;
    if (N!=2 && N!=4 && N!=8 && N!=16 && N!=32 && N!=64 && N!=128) return 0;
    for (int i=0; i<N; i++) 
        for (int j=0; j<N; j++)
            cin >> map[i][j];

    solve(0, 0, N);
    cout << white << "\n" << blue << "\n";
}

image

해커톤 준비하고 pr, 커밋, 브랜치 망치는 바람에 허버허버 헤매다가 겨우 끝내고 한시반이 되어서야 시작….. 내일 또 출근이라 일찍 일어나야해서…… 정답률 높은 문제로 골라서 풀었다

BOJ-10773

아주 아주 간단한 스택 문제… 스택의 개념을 묻는 질문이다! stack 라이브러리를 처음 써보는데, pop()의 return 값이 내가 기존에 구현하던 int가 아니라 void여서 top()을 잘 활용했다

#include <iostream>
#include <algorithm>
#include <stack>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int K;
    cin >> K;
    if (K<0 || K>100000) return 0;
    stack<int> s;
    for (int i=0; i<K; i++) {
        int num;
        cin >> num;
        if (num==0) s.pop();
        else s.push(num);        
    }
    int sum = 0;
    if (s.empty()) cout << 0 << "\n";
    else {
        while(!s.empty()) {
            int pop = s.top();
            sum += pop;
            s.pop();
        }
        cout << sum << "\n";
    } 
}

image

사실 오늘도 풀던 dp 문제가 있었는데, 문제를 잘못 이해해서 30분 허비(?)했다… 그러고서는 시간이 너무 늦어서 내일 출근을 위해 다른 쉬운 문제로 갈아탔다… 내일은 꼭 풀어낼거다!! 오늘 할게 진짜 많은데 그냥 자야겠다………..

john

BOJ-11399

아주아주 간단한 ATM 문제! 그리디 알고리즘을 이용하는 것인데, 다음번엔 라이브러리 없이 sort함수도 직접 구현해봐야겠다…

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cout.tie(NULL); cin.tie(NULL);

    int N;
    vector<int> P;
    cin >> N;
    if (N<0 || N>1000) return 0;
    
    for (int i=0; i<N; i++) {
        int num;
        cin >> num;
        if (num<0 || num>1000) return 0;
        P.push_back(num);
    }

    sort(P.begin(), P.end());
    int sum = 0; int result = sum;
    for (auto it=P.begin(); it!=P.end(); ++it) {
        sum = *it + sum;
        result = sum + result;
    }
    cout << result << endl;
    return 0;
}

image

캠핑 왔는데 노트북 들고 와서 하는 것…그리고 나름 벙갈로 안에서 하는 연습 그러기엔 너무 간단했지만 과 오늘 마감이었던 기세 과제 두개를 다!! 끝낸 것에 의의를 둔다…..!! 화이팅…

BOJ-1149

Dynamic Programming의 기본 원리로 푸는 문제… 처음에 다소 당황했지만 2d array로 접근하는 방식을 이해하면 쉽게 풀 수 있다

#include <iostream>
#include <algorithm>

using namespace std;

#define MAX 1000
int house[MAX][3];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int N;
    cin >> N;
    int cost[3];

    if (N<1 || N>1000) return 0;
    
    for (int i=0; i<N; i++) {
        cin >> cost[0] >> cost[1] >> cost[2];
        house[i+1][0] = min(house[i][1],house[i][2])+cost[0];
        house[i+1][1] = min(house[i][0],house[i][2])+cost[1];
        house[i+1][2] = min(house[i][1],house[i][0])+cost[2];
    }
    
    cout << min(house[N][2],min(house[N][0],house[N][1]));
}

image