[λ°±μ€€/C++] 16457번 λ‹¨ν’μžŽ 이야기

2022. 8. 12. 21:01Β·PS/C++
λ°˜μ‘ν˜•

λ°±μ€€

 


πŸ€”λ¬Έμ œ 이해

각 ν€˜μŠ€νŠΈλ‹Ή ν•„μš”ν•œ μŠ€ν‚¬μ„ λ‹€ μ‚¬μš©κ°€λŠ₯ν•  λ•Œ κ·Έ ν€˜μŠ€νŠΈλ₯Ό κΉ° 수 μžˆλ‹€. 2n개의 μŠ€ν‚¬ 쀑 n개만 κ³¨λžμ„ λ•Œ μ΅œλŒ€λ‘œ 많이 κΉ° 수 μžˆλŠ” ν€˜μŠ€νŠΈμ˜ 개수λ₯Ό 좜λ ₯ν•˜λ©΄ λœλ‹€.

쑰건
ν‚€μ˜ 개수 : n
ν€˜μŠ€νŠΈμ˜ 개수 : m (1 ~ 100)
ν€˜μŠ€νŠΈ λ‹Ή μŠ€ν‚¬ 수 : k (1 ~ n)
μŠ€ν‚¬μ˜ 번호 ( 1~2n)

πŸ”₯풀이πŸ”₯

2n개의 μŠ€ν‚¬ 쀑 λ°°μΉ˜ν•  μŠ€ν‚¬ n개λ₯Ό κ³¨λžμ„ λ•Œ κΉ° 수 μžˆλŠ” ν€˜μŠ€νŠΈμ˜ 개수 쀑 κ°€μž₯ 큰 값을 좜λ ₯ν•˜κ²Œ ν–ˆλ‹€.

 

λ³€μˆ˜

- quest[i] : i번째 ν€˜μŠ€νŠΈμ—μ„œ ν•„μš”ν•œ μŠ€ν‚¬μ˜ 번호λ₯Ό λΉ„νŠΈλ‘œ ν‘œν˜„

 

μž¬κ·€ν•¨μˆ˜ void Solve(int i, int d, int cnt) 

- ν˜„μž¬ μƒνƒœ : ν˜„μž¬κΉŒμ§€ μ •ν•œ μŠ€ν‚¬μ„ λΉ„νŠΈλ‘œ λ‚˜νƒ€λ‚΄λŠ” i, λͺ‡λ²ˆμ§Έ μŠ€ν‚¬κΉŒμ§€ μ²˜λ¦¬ν•΄μ€¬λŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” d, μ •ν•œ μŠ€ν‚¬μ˜ 개수 cnt

- λ‹€μŒ μƒνƒœ : d번 μŠ€ν‚¬μ„ μ‚¬μš© or d번 μŠ€ν‚¬μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŒ

- μ§„μž… μƒνƒœ : 아무것도 μ •ν•˜μ§€ μ•Šμ€ μƒνƒœμ΄κ³  1번 μŠ€ν‚¬λΆ€ν„° 골라야 ν•˜λ―€λ‘œ Solve(0, 1, 0)

- μ’…λ£Œ μƒνƒœ : cntκ°€ n일 λ•Œ, 즉 n개의 μŠ€ν‚¬μ„ κ³¨λžμ„ λ•Œ return

- d번 μŠ€ν‚¬μ„ μ‚¬μš©ν•˜κ²Œ λœλ‹€λ©΄ i에 ν•΄λ‹Ή μŠ€ν‚¬ 번호의 λΉ„νŠΈλ₯Ό 켜쀌(1둜 λ§Œλ“€μ–΄μ€€λ‹€)

 

ν•¨μˆ˜ void CountQuest(int x) 

- 각 ν€˜μŠ€νŠΈμ—μ„œ ν•„μš”ν•œ μŠ€ν‚¬μ˜ 정보와 μ •ν•œ n개의 μŠ€ν‚¬μ„ AND μ—°μ‚°ν•œ 값이 ν•„μš”ν•œ μŠ€ν‚¬μ˜ 정보와 μΌμΉ˜ν•˜λ‹€λ©΄ κΉ° 수 μžˆλŠ” ν€˜μŠ€νŠΈμ˜ 수λ₯Ό +1

- λͺ¨λ“  ν€˜μŠ€νŠΈμ™€ 비ꡐ ν›„ 좜λ ₯ν•  λ³€μˆ˜ ans와 비ꡐ해 더 큰 값을 ans에 μ €μž₯

 

✍️ ν›„κΈ°

문제의 μž…λ ₯이 μ–΄λ–»κ²Œ λ“€μ–΄μ˜€λŠ”μ§€ μ œλŒ€λ‘œ ν™•μΈν•˜μ§€ μ•Šμ•„μ„œ 3λ²ˆμ΄λ‚˜ ν‹€λ Έλ‹€.


#include <iostream>
#include <vector>

using namespace std;

int n, m, k, a;
int quest[102];
int ans;

void CountQuest(int x) {
    int cnt = 0;
    for (int i = 0; i < m; i++) {
        if ((quest[i] & x) == quest[i]) {
            cnt++;
        }
    }
    ans = max(ans, cnt);
}


void Solve(int i, int d, int cnt) {
    if (cnt == n) {
        CountQuest(i);
        return;
    } else if (d == 2 * n + 1) return;
    else {
        Solve(i, d + 1, cnt);
        i = i | (1 << d);
        Solve(i, d + 1, cnt + 1);
    }
}


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

    cin >> n >> m >> k;
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < k; j++) {
            cin >> a;
            quest[i] = quest[i] | (1 << a);
        }
    }
    Solve(0, 1, 0);

    cout << ans;
}
728x90
λ°˜μ‘ν˜•

'PS > C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ°±μ€€/C++] 24524번 μ•„λ¦„λ‹€μš΄ λ¬Έμžμ—΄  (0) 2022.10.05
[λ°±μ€€/C++] 9663번 N-Queen  (0) 2022.08.16
[λ°±μ€€/C++] 2239번 μŠ€λ„μΏ   (0) 2022.08.11
[λ°±μ€€/C++] 1043번 거짓말  (0) 2022.07.26
[λ°±μ€€/C++] 17143번 λ‚šμ‹œμ™•  (0) 2022.07.26
'PS/C++' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [λ°±μ€€/C++] 24524번 μ•„λ¦„λ‹€μš΄ λ¬Έμžμ—΄
  • [λ°±μ€€/C++] 9663번 N-Queen
  • [λ°±μ€€/C++] 2239번 μŠ€λ„μΏ 
  • [λ°±μ€€/C++] 1043번 거짓말
yulee_to
yulee_to
  • yulee_to
    yulee
    yulee_to
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (115) N
      • CS (2)
        • OS (0)
        • DB (0)
        • Network (2)
      • Develop (21)
        • Spring (9)
        • Java (12)
        • Python (0)
        • Algorithm (0)
        • 기타 (0)
      • PS (39)
        • C++ (39)
        • Java (0)
      • Book (39)
        • μžλ°”μ˜ μ‹  (32)
        • μŠ€ν”„λ§ μž…λ¬Έμ„ μœ„ν•œ μžλ°” 객체 μ§€ν–₯의 원리와 이해 (7)
      • ETC (4)
        • Blog (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • νƒœκ·Έ
    • λ°©λͺ…둝
  • 링크

  • 곡지사항

  • 인기 κΈ€

  • νƒœκ·Έ

    DP
    Spring
    EC2
    λ°±μ€€
    μžλ°”μ˜ μ‹ 
    λ©€ν‹°μΊ νΌμŠ€
    μŠ€ν”„λ§ μž…λ¬Έ
    GodOfJava
    TiL
    객체지ν–₯
    Java
    boj
    μ—μŠ€λ„·μ‹œμŠ€ν…œ
    1일1λ°±μ€€
    λΆ€νŠΈμΊ ν”„
    λ¬Έμ œν’€μ΄
    C++
    μžλ°”
    μ•Œκ³ λ¦¬μ¦˜
    μŠ€ν„°λ””
  • 졜근 λŒ“κΈ€

  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
yulee_to
[λ°±μ€€/C++] 16457번 λ‹¨ν’μžŽ 이야기
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”