백준: Class 4 - 15650, 15652, 15654, 15657, 15663, 15666

1 분 소요


</br> 좀 쉬운 문제 풀면서 머리를 식히자
</br>

15650: N과 M (2)

https://www.acmicpc.net/problem/15652

void func(int now, int d){
    if( d == m ){
        for(int i = 0; i < m; i++){
            cout << v[i] << ' ';
        }
        cout << '\n';
        return;
    }
    for(int i = now+1; i <= n; i++){
        v.push_back(i);
        func(i, d+1);
        v.pop_back();
    }
}

이런 건 이제 바로 바로 짜 줘야 겠지
</br>

15652: N과 M (4)

https://www.acmicpc.net/problem/15652

void func(int now, int d){
    if( d == m ){
        for(int i = 0; i < m; i++){
            cout << v[i] << ' ';
        }
        cout << '\n';
        return;
    }
    for(int i = now; i <= n; i++){
        v.push_back(i);
        func(i, d+1);
        v.pop_back();
    }
}

틀린 그림 찾기
</br>

15654: N과 M (5)

https://www.acmicpc.net/problem/15654

void func(int now, int d){
    if( d == m ){
        for(int i = 0; i < m; i++){
            cout << v[i] << ' ';
        }
        cout << '\n';
        return;
    }
    visited[now] = 1;
    for(int i = 0; i < n; i++){
        if( visited[i] == 1 ) continue;
        v.push_back(nums[i]);
        func(i, d+1);
        v.pop_back();
    }
    visited[now] = 0;
}

visited를 추가해서 지금 이미 방문한 상태면 넣지 않기
</br>

15657: N과 M (8)

https://www.acmicpc.net/problem/15657

void func(int now, int d){
    if( d == m ){
        for(int i = 0; i < m; i++){
            cout << v[i] << ' ';
        }
        cout << '\n';
        return;
    }
    for(int i = now; i < n; i++){
        v.push_back(nums[i]);
        func(i, d+1);
        v.pop_back();
    }
}

그냥 now부터 가능
</br>

15663: N과 M (9)

https://www.acmicpc.net/problem/15663

set< vector<int> > st;
void func(int now, int d){
    if( d == m ){
        st.insert(v);
        return;
    }
    visited[now] = 1;
    for(int i = 0; i < n; i++){
        if( visited[i] == 1 ) continue;
        v.push_back(nums[i]);
        func(i, d+1);
        v.pop_back();
    }
    visited[now] = 0;
}

중복 방지 위해서 set에 넣고 나중에 출력하기
</br>

15666: N과 M (12)

https://www.acmicpc.net/problem/15666

void func(int now, int d){
    if( d == m ){
        st.insert(v);
        return;
    }
    for(int i = now; i < n; i++){
        v.push_back(nums[i]);
        func(i, d+1);
        v.pop_back();
    }
}

visited 빼고 now면 출력하기
</br>


날먹 코딩
쉬운 걸 푸니 기분이 좋다
</br>

댓글남기기