Tags
- LV2
- ์ํ
- ์ ์๋ก
- ๊ตฌํ
- ์๋ฃ๊ตฌ์กฐ
- PGM
- ์๋ฎฌ๋ ์ด์
- greedy
- ๋ฌธ์์ด
- BFS
- SpringBoot
- sort
- stack
- BOJ
- queue
- ๊ทธ๋ํ ์ด๋ก
- Brute Force Algorithm
- dfs
- Java
- CodingTest
- ๋๋น ์ฐ์ ํ์
- ๊น์ด ์ฐ์ ํ์
- ์ ๋ ฌ
- ๋ฐฑํธ๋ํน
- Study
- DP
- ๊ต์ฌ
- Python
- ๊ทธ๋ํ ํ์
- Dynamic Programming
Archives
๊ธฐ๋ก๋ฐฉ
Lv.2 : ๋ค์ ํฐ ์ซ์ ๋ณธ๋ฌธ
๐ธ ๋ฌธ์ ๋ถ์ ๐ธ
- ์์ฐ์ n์ ๋ค์ ํฐ ์ซ์๋ฅผ ๊ตฌํ๋ค.
- ๋ค์ ํฐ ์ซ์๋ 3๊ฐ์ง๋ก ์ ์ํ๋ค.
- n๋ณด๋ค ํฐ ์์ฐ์
- 2์ง์๋ก ๋ณํํ์ ๋ n๊ณผ ๋ค์ ํฐ ์ซ์์ 1์ ๊ฐ์๊ฐ ๊ฐ๋ค.
- ๋ค๋ฅธ ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์์ ์
๐ธ ๋ฌธ์ ํ์ด ๐ธ
- n์ 2์ง์ ๋ณํ ํ 1์ ๊ฐ์๋ฅผ ์ธ์ ์ ์ฅํ๋ค.
- n์ 1์ฉ ์ฆ๊ฐํด๊ฐ๋ฉฐ ๋ค์ ํฐ ์ซ์์ ์ ์๋ฅผ ๋ง์กฑํ๋์ง ํ์ธํ๋ค.
- 2์ง์ ๋ฌธ์์ด์ 1์ ๊ฐ์๋ฅผ ์ธ๋ ๋ถ๋ถ์์ ์ต์ ํ๊ฐ ํ์ํ๋ค.
๐ธ ์ฝ๋ ๐ธ
class Solution {
public int solution(int n) {
int one_cnt = count_bit(Integer.toBinaryString(n));
while(true) {
int next_num_one_cnt = count_bit(Integer.toBinaryString(++n));
if(one_cnt == next_num_one_cnt) break;
}
return n;
}
private int count_bit(String binaryString) {
int count = 0;
int binary = Integer.parseInt(binaryString, 2);
while (binary != 0) {
count += (binary & 1); // ์ค๋ฅธ์ชฝ์์๋ถํฐ ํ ๋นํธ์ฉ ํ์ธ
binary >>>= 1; // ์ค๋ฅธ์ชฝ์ผ๋ก ๋นํธ ์ด๋
}
return count;
}
}
๐ธ ์ฝ๋ ํด์ ๐ธ
- ๋ค์ ํฐ ์๊ฐ ๋ง์กฑ ํ ๋๊น์ง n์ +1ํ๋ฉฐ ๊ณ์ฐ์ ๋ฐ๋ณตํ๋ค.
- 2์ง์ ๋ฌธ์์ด์์ ๋นํธ์ฐ์ฐ์ ํตํด 1์ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ค.
๐ธ ์ค๋ต ์ฝ๋ 1 ๐ธ
class Solution {
public int solution(int n) {
int one_cnt = Integer.toBinaryString(n).replaceAll("0","").length();
while(true) {
int next_num_one_cnt = Integer.toBinaryString(++n).replaceAll("0","").length();
if(one_cnt == next_num_one_cnt) break;
}
return n;
}
}
- 2์ง์ ๋ฌธ์์ด์์ 0์ ์ ๊ฑฐํ๊ตฌ ๊ธธ์ด๋ฅผ ์ธ์ 1์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค.
- replaceAll๊ณผ length ๋ชจ๋ ๋ฌธ์์ด์ ์ ์ฒด ์ํํด์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๊ฐ ๋๋ฌด ์ปค์ ธ ํจ์จ์ฑ ํ ์คํธ์์ ์๊ฐ์ด๊ณผ๊ฐ ๋๋ค.
๐ธ ์ค๋ต ์ฝ๋ 2 ๐ธ
class Solution {
public int solution(int n) {
String binary = Integer.toBinaryString(n);
char[] bc = binary.toCharArray();
int last_idx = binary.lastIndexOf('1');
String plus_ones = ""; // ์ถ๊ฐํด์ผ ๋ 1๋ค
while(true) {
if(last_idx == 0) {
bc[0] = '0';
binary = "1" + String.valueOf(bc);
break;
} else if (bc[last_idx-1] == '1') {
bc[last_idx] = '0';
last_idx--;
plus_ones += "1";
} else {
bc[last_idx] = '0';
bc[last_idx-1] = '1';
binary = String.valueOf(bc);
break;
}
}
int answer = Integer.parseInt(binary, 2);
if(plus_ones.length() > 0) {
answer += Integer.parseInt(plus_ones, 2);
}
return answer;
}
}
- ์ค๋ต 1๋ฒ์์ ๋ค๋ฅธ์ชฝ์ ์๋ํด๋ณด๊ณ ์ 1์ ๊ฐ์๋ฅผ ์ธ๋๊ฒ ์๋, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ 1์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ๊ณ์ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
- 1์ ๊ฐ์๊ฐ ๊ฐ์์ผ ํ๋ฏ๋ก, ๊ฐ์ฅ ์ค๋ฅธ์ชฝ 1์ ์ธ๋ฑ์ค์์ 1์ ๋ํด์ 2์ง์๋ฅผ ๊ณ์ฐํ๋ค.
- ์ฌ๋ผ์ง 1๋งํผ ๋ํด์ฃผ๋ฉด ๋ค์ ํฐ ์๋ฅผ ๊ตฌํ ์ ์๋ค.
- ํจ์จ์ฑ ํ ์คํธ์์ ์ ๋ฐ์ ๋๋ ์๊ฐ์ด๊ณผ๊ฐ ๋จ๊ฒ ๋๋ค.
๐ธ end ๐ธ
- ๊ฐ๋จํ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ๋๋ฐ, replaceAll()๊ณผ length()์ ์ํ์ฑ์ ์๊ฒ ๋์๋ค.
- ๋ค๋ฅธ ํ์ด๋ฅผ ๋ดค๋๋ฐ ๋ฐฐ์ธ ์ ์ด ๋ง์๋ค.
- ๋จ์ํ๊ฒ 2์ง๋ฒ ํจํด์ผ๋ก ๋นํธ์ฐ์ฐ์ ํตํด ๊ตฌํ๋ ์ฝ๋๊ฐ ํ ์ค ํ์ด๋ก ๊ฐ์ฅ ์งง๊ณ ํจ์จ์ ์ผ๋ก ๋ณด์๋๋ฐ ์ดํดํ์ง ๋ชปํ๋ค. ๊ณ์ฐ์ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด ๋นํธ ์ฐ์ฐ์ ๊ตฌํํ๊ฒ ๋ณด์ด๋๋ฐ ์๋ฆฌ๊น์ง ์์ง ๋ชปํ๋ค.
- ๋๋ 1์ ๋นํธ์ฐ์ฐ์ผ๋ก ๊ตฌํ๊ธฐ ์ํด ์ง์ ๋ฐ๋ณต๋ฌธ์ ๋๋ ธ๋๋ฐ, Integer.bitCount()๋ผ๋ ๋ฉ์๋๊ฐ ์์๋ค. ๋ค์๋ถํฐ๋ ํ์ฉํด์ผ๊ฒ ๋ค.
728x90
'CodingTest > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Lv.2 : ์ง์ง์ด ์ ๊ฑฐํ๊ธฐ (0) | 2023.09.08 |
---|---|
Lv.2 : ํผ๋ณด๋์น ์ (0) | 2023.09.08 |
Lv.2 : ์ซ์์ ํํ (0) | 2023.09.07 |
Lv.2 : ์ด์ง ๋ณํ ๋ฐ๋ณตํ๊ธฐ (0) | 2023.09.06 |
Lv.2 : ์ฌ๋ฐ๋ฅธ ๊ดํธ (0) | 2023.09.05 |