반응형
문제
- 문제 링크: 이진 변환 반복하기
해설
- 자료구조:
- 시간복잡도:
(풀이과정)
1)
2)
3)
4)
코드
(C언어)
solution 1)
더보기
solution 1
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C++)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(C#)
solution 1)
더보기
#include<>
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Java)
solution 1)
- N: 주어진 수
- while문에서 N이 1이 될 때까지 2로 나누므로 O(logN)
- s.replace(): O(N)
- 최종 시간 복잡도: O(NlogN)
더보기
class Solution {
public int[] solution(String s) {
// 이진 변환 횟수를 저장하는 변수
int countTransform = 0;
// 제거된 모든 0의 개수를 저장하는 변수
int countZero = 0;
// s가 '1'이 아닌 동안 계속 반복
while (!s.equals("1")) {
// 이진 변환 횟수를 1 증가
countTransform++;
// s에서 '0'의 개수를 세어 countZero에 누적
int zero = s.replace("1", "").length();
countZero += zero;
// s에서 '1'의 개수를 세고, 이를 이진수로 반환. Integer.toBinaryString() 활용
s = Integer.toBinaryString(s.length() - zero);
}
// 이진 변환 횟수와 제거된 모든 '0'의 개수를 배열에 담아 반환
return new int[]{countTransform, countZero};
}
}
solution 2)
더보기
#include<>
solution 3)
더보기
#include<>
(Python)
solution 1)
- N: 주어진 수
- while문에서 N이 1이 될 때까지 2로 나눔: O(logN)
- s.count(): O(N)
- 최종 시간 복잡도: O(NlogN)
더보기
def solution(s):
# 이진 변환 횟수를 저장하는 변수
count_transform = 0
# 제거된 모든 0의 개수를 저장하는 변수
count_zero = 0
# s가 '1'이 아닌 동안 계속 반복
while s != "1":
# 이진 변환 횟수를 1 증가
count_transform += 1
# s에서 '0'의 개수를 세어 count_zero에 누적
count_zero += s.count("0")
# s에서 '1'의 개수를 세고, 이를 이진수로 변환
# bin() 함수를 사용하기 위해 0b 뒤의 문자열 활용
s = bin(s.count("1"))[2:]
# 이진 변환 횟수와 제거된 모든 '0'의 개수를 리스트에 담아 변환
return [count_transform, count_zero]
solution 2)
더보기
def solution(s):
answer = []
cnt, z_cnt = 0, 0
while True:
cnt += 1
z_cnt += s.count('0')
s = s.replace('0','')
s = str(bin(len(s)))[2:]
if s == '1':
return [cnt, z_cnt]
solution 3)
더보기
import
(JavaScript)
solution 1)
- N: 주어진 수
- while문에서 N이 1이 될 때까지 2로 나누므로 O(logN)
- s에서 '0' 혹은 '1'의 개수를 구할 때 필요한 시간 복잡도: O(N)
- 최종 시간 복잡도: O(NlogN)
더보기
function solution(s) {
// 이진 변환 횟수를 저장하는 변수
let countTransform = 0;
// 제거된 모든 0의 개수를 저장하는 변수
let countZero = 0;
// s가 '1'이 아닌 동안 계속 반복
while (s !== '1') {
s = s.split(''); // 문자열을 배열로 변환
// 이진 변환 횟수를 1 증가
countTransform += 1;
// s에서 '0'의 개수를 세어 countZero에 누적
countZero += s.filter((c) => c === '0').length;
// s에서 '1'의 개수를 세고, 이를 이진수로 변환
s = s.filter((char) => char === '1').length.toString(2);
}
// 이진 변환 횟수와 제거된 모든 '0'의 개수를 배열에 담아 반환
return [countTransform, countZero];
}
solution 2)
더보기
import
solution 3)
더보기
import
반응형
'1-4. 코딩테스트 문제집(진행중) > PCCP(Lv2)' 카테고리의 다른 글
[PCCP] Lv2: 카펫(42842) 해설 (0) | 2024.12.25 |
---|---|
[PCCP] Lv2: 롤케이크 자르기(132265) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 양궁대회(92342) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: N-Queen(12952) 해설 (0) | 2024.12.25 |
[PCCP] Lv2: 피로도(87946) 해설 (0) | 2024.12.25 |