โ๏ธ First Question: Size of the smallest subset with maximum Bitwise OR
๐ Question
์์ ์ ์๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ด ์์ ๋,
๋นํธ OR ์ฐ์ฐ์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๋ถ๋ถ์งํฉ ์ค์์ ํฌ๊ธฐ๊ฐ ๊ฐ์ฅ ์์ ๊ฒ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
ํด๋น ๋ถ๋ถ์งํฉ์ ํฌ๊ธฐ๋ฅผ ์ ๋ต์ผ๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
Input, Ouput์ ๋ค์๊ณผ ๊ฐ๋ค.
Input | Output |
5 1 3 4 2 | 2 |
๐ Solution
dp๋ฅผ ์ฌ์ฉํ๋ฉด ์งง๊ณ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
์์์ ๊ฐ์ด [ 5, 1, 3, 4, 2 ]๋ก ์ด๋ฃจ์ด์ง ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ค๋ฉด,
๋นํธ OR ์ฐ์ฐ์ ํฉ์ด ์ต๋๊ฐ ๋๋ ๋ถ๋ถ์งํฉ์ [ 5, 2 ], [ 5, 3 ], [ 4, 3 ] ์ด๋ ๊ฒ ๋๊ณ
๊ฐ์ฅ ์์ ์งํฉ์ ํฌ๊ธฐ๋ 2์ด๋ฏ๋ก 2๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
1. ์ ๋ ฅ๋ฐ์ ๋ฐฐ์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ(ํฐ ์๋ถํฐ ๋ํด์ผ ํฉ์ ์ต๋๋ก ํ๋ฉด์ ๊ฐ์๋ ์ต์๋ก ํ ์ ์๊ธฐ ๋๋ฌธ)
2. for๋ฌธ์ ๋๋ฉด์ ํ์ฌ arr ๊ฐ๊ณผ OR ์ฐ์ฐ์ ํ๋ ๊ฒ์ด ์ต์ ์ธ์ง, ๊ทธ๋ ์ง ์๋ ๊ฒ์ด ์ต์ ์ธ์ง ๊ตฌํ๋ค.
์๋ฅผ ๋ค์ด, ํ์ฌ๊น์ง ๋นํธ OR ์ฐ์ฐ ์ต๋๊ฐ์ด 6(2์ง์: 110)์ด๋ผ๋ฉด
1(2์ง์: 1)๊ณผ OR ์ฐ์ฐ์ ํ์ ๋๋ 7(2์ง์: 111)์ด ๋์ง๋ง,
2(2์ง์: 10)๊ณผ OR ์ฐ์ฐ์ ํ๋ฉด ๊ทธ๋๋ก 6(2์ง์: 110)์ด ๋์ด ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฏ๋ก ์ด๋๋ OR ์ฐ์ฐ์ ํ์ง ์๋ ๊ฒ์ด ์ต์ ์ด๋ค.
์ฐ์ฐ ๊ฐ์ด ์ฆ๊ฐํ ๋๋ง ์ ๋ต(cnt)์ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด ๋๋ค.
3. ์ ๋ต(cnt) ์ถ๋ ฅ
๐ก rbegin, rend
c++ vector์์ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ ํ ๋ ํญ์ ์ถ๊ฐ ํจ์๋ฅผ ๋ง๋ค์ด์ sort์ ๋ง์ง๋ง ์ธ์๋ก ๋๊ฒจ์ฃผ์๋๋ฐ,
sort(๋ฐฐ์ด์ด๋ฆ.rbegin(), ๋ฐฐ์ด์ด๋ฆ.rend())
์ด๋ฐ์์ผ๋ก ํ๋ฉด ์๋์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ์ด ๋๋ค!
๐ก ๋ ผ๋ฆฌ OR(|) ์ฐ์ฐ๊ณผ ๋น๊ต ์ฐ์ฐ
OR ์ฐ์ฐ์์ ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋๋
๋ฐ๋์ OR ์ฐ์ฐ์์ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋จผ์ ๊ณ์ฐ์ด ๋๋๋ก ๋ช ์ํด์ผ ํ๋ค.
if(dp[i-1] >= (dp[i-1] | arr[i]))
๊ทธ๋ ์ง ์์ผ๋ฉด ์ปดํ์ผ์ ์๋ฌ ๋ฐ์(vscode ๊ธฐ์ค)
๐ Code(C++)
// Google online challenge 2020 for summer internships 2021
// https://www.geeksforgeeks.org/google-online-challenge-2020/
// First Question: Size of the smallest subset with maximum Bitwise OR
// dp
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
int main(void)
{
int dp[5];
int cnt = 1;
vector<int> arr;
arr.push_back(5);
arr.push_back(1);
arr.push_back(3);
arr.push_back(4);
arr.push_back(2);
sort(arr.rbegin(), arr.rend()); // ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
dp[0] = arr[0];
for(int i = 1 ; i < 5 ; i++) {
if(dp[i-1] >= (dp[i-1] | arr[i])) {
dp[i] = dp[i-1];
}
else {
dp[i] = dp[i-1] | arr[i];
cnt++;
}
}
printf("%d\n", cnt);
return 0;
}
'Google Online Challenge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Google SWE Online Coding Challenge Internship 2021 (0) | 2021.04.28 |
---|---|
Google SWE Online Coding Challenge Internship 2021 (0) | 2021.04.27 |
Google online challenge 2020 for summer internships (0) | 2021.04.26 |