Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- algorithm
- 2294
- RootMotion
- 오블완
- const
- UnrealEngine5
- 1563
- baekjoon
- 줄 세우기
- 백준
- C++
- Unreal Engine5
- 티스토리챌린지
- Frustum
- 언리얼엔진5
- DeferredRendering
- Programmers
- RVO
- winapi
- GeeksForGeeks
- directx
- softeer
- NRVO
- 팰린드롬 만들기
- DirectX11
- 프로그래머스
- IFileDialog
- C
- UE5
- UnrealEngine4
Archives
- Today
- Total
Game Develop
[Algorithm] Programmers :: 다음 큰 숫자 본문
https://school.programmers.co.kr/learn/courses/30/lessons/12911
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#include <bitset>
using namespace std;
int checkOneBit(int n)
{
string bitString = bitset<32>(n).to_string();
int oneBitCount = 0;
for (int i = 0; i < 32; i++)
{
if (bitString[i] == '1')
{
oneBitCount++;
}
}
return oneBitCount;
}
int solution(int n) {
int answer = 0;
int inputBitCount = checkOneBit(n);
while (1)
{
n++;
int nextNumBitCount = checkOneBit(n);
if (inputBitCount == nextNumBitCount)
{
return n;
}
}
}
|
cs |
bitset을 처음 사용해본 문제. 위는 string으로 변환해서 체크한거긴한데 굳이 그럴필요 없다.
bitset 멤버함수로 1인 bit의 개수를 리턴해주는 count()함수가 있기 때문이다.
그러면 아래처럼 훨씬 깔끔해진다.
1
2
3
4
5
6
7
8
9
|
int solution(int n) {
int stand = bitset<21>(n).count();
while (1)
{
if (bitset<21>(++n).count() == stand) return n;
}
}
|
cs |
n++이 아니라 ++n으로 해야한다.
이 문제말고 연습용으로 하나 더 풀만한 문제가 있다. 1레벨짜리긴한데, 그래서 더 연습용으로 적합한듯하다.
https://school.programmers.co.kr/learn/courses/30/lessons/17681
이미 옛날에 풀었던 문제였었다. 근데 그때는 비트연산자로 편하게 푼게 아니라 좀 더 귀찮게 풀었었다. 원리는 비슷하긴한데, bitset이용해서 더 쉽게 표현했다. 물론 굳이 비트연산을 할 때 bitset을 꼭 쓸 필요는 없지만, 나는 bitset에 익숙해지고싶어서 사용했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
vector<string> solution(int n, vector<int> arr1, vector<int> arr2) {
vector<string> answer;
for (int i = 0; i < n; i++)
{
bitset<16> first(arr1[i]);
bitset<16> second(arr2[i]);
first = first | second;
string temp = "";
for (int i = n-1; i >= 0; i--)
{
if (first[i] == 0) temp += ' ';
else temp += '#';
}
answer.push_back(temp);
temp = "";
}
return answer;
}
|
cs |
'Algorithm > Programmers' 카테고리의 다른 글
[Algorithm] Programmers :: 피로도 (0) | 2022.09.05 |
---|---|
[Algorithm] Programmers :: 괄호 회전하기 (0) | 2022.09.05 |
[Algorithm] Programmers :: 전력망을 둘로 나누기 (0) | 2022.08.29 |
[Algorithm] Programmers :: 삼각 달팽이 (0) | 2022.08.29 |
[Algorithm] Programmers :: 방금그곡 (0) | 2022.08.27 |