너무 쉬운 문제여서 레벨2 보단 레벨 1에 있어야 하지 않을까 생각이 든다.
로직은 그냥 문제에서 요구한 그대로 코드로 구현하면 된다.
임시 String을 String += "1"로 하는것과
// s가 1이 아니면 실행
while (!s.equals("1")) {
// 임시 String
String temp = "";
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '1') {
temp += "1";
} else {
sum++;
}
}
// s에 temp의 길이를 이진변환 후 대입
s = Integer.toString(temp.length(), 2);
// 실행횟수 증가
answer[0]++;
}
// 제거한 0개수 삽입
answer[1] = sum;
StringBuilder를 사용하는것을 비교했을때 StringBuilder를 사용하는게 훨씬 빠르다.
// s가 1이 아니면 실행
while (!s.equals("1")) {
// 임시 String
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '1') {
sb.append("1");
} else {
sum++;
}
}
// s에 temp의 길이를 이진변환 후 대입
s = Integer.toString(sb.length(), 2);
// 실행횟수 증가
answer[0]++;
}
// 제거한 0개수 삽입
answer[1] = sum;
시간 제한이 빡빡하게 있었다면 문자열 덧셈 연산은 사용하지 않아야 맞췄을것 같다.
최종 코드
class Solution {
public int[] solution(String s) {
int[] answer = new int[2];
int sum = 0;
// s가 1이 아니면 실행
while (!s.equals("1")) {
// 임시 String
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '1') {
sb.append("1");
} else {
sum++;
}
}
// s에 temp의 길이를 이진변환 후 대입
s = Integer.toString(sb.length(), 2);
// 실행횟수 증가
answer[0]++;
}
// 제거한 0개수 삽입
answer[1] = sum;
return answer;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 점프와 순간 이동 (0) | 2022.09.11 |
---|---|
(Java) 프로그래머스 - 영어 끝말잇기 (0) | 2022.09.08 |
(Java) 프로그래머스 - 삼각 달팽이 (0) | 2022.09.07 |
(Java) 프로그래머스 - 2개 이하로 다른 비트 (0) | 2022.09.06 |
(Java) 프로그래머스 - 파일명 정렬 (0) | 2022.09.04 |