오늘 코딩테스트를 공부하다가 다른사람의 풀이를 보았는데 정말 똑똑하게 푼 것 같은 내용이 있어서 저도 복습할 겸 정리하면서 소개해드리고 싶었습니다.
import java.util.ArrayList;
class Solution {
public int[] solution(int l, int r) {
ArrayList<Integer> list = new ArrayList<>();
for(int i = 1; i<64; i++) {
int num = Integer.parseInt(Integer.toBinaryString(i)) * 5;
if (l <= num && num <= r)
list.add(num);
}
return list.isEmpty() ? new int[] {-1} : list.stream().mapToInt(i -> i).toArray();
}
}
저는 처음에 단순히 반복문으로 l부터 r까지 돌면서 풀려고 했는데 이 분은 이진수로변환하여 푸셨더라구요.
0과 5로만 이루어진 숫자를 생성하기 위해서 숫자를 이진수로 변환하여 "0", "1"을 각각 "0"과 "5"로 매핑!
방법) 십진수를 이진수로 변환하고 * 5 (변환하는 방법은 아래에서 설명할게요)
십진수 1 : 이진수 1 => 1*5 = 5
십진수 2 : 이진수 10 => 10*5 = 50
십진수 3 : 이진수 11 => 11*5 = 55
십진수 4: 이진수 100 => 100*5 = 500
십진수 5: 이진수 101 => 101*5 = 505
십진수 6: 이진수 110 => 110*5 = 550
이런식으로 계산을 한 다음에 범위 [l, r]에 포함되는지 확인을 하고, 리스트에 추가
if (l <= num && num <= r)
list.add(num);
그럼 여기에 나오는 이진수와 십진수란?
이진수는 0과 1만 사용하여 숫자를 표현하는 방법.
이진수(Binary Number) : 컴퓨터가 사용하는 숫자 체계로, 0과 1만 사용
십진수(Decimal Number) : 우리가 일상에서 사용하는 숫자 체계, 0~9 사이의 숫자
이진수와 십진수의 관계
- 십진수 1 = 이진수 1
- 십진수 2 = 이진수 10 (1×2¹ + 0×2⁰)
- 십진수 3 = 이진수 11 (1×2¹ + 1×2⁰)
- 십진수 4 = 이진수 100 (1×2² + 0×2¹ + 0×2⁰)
- 십진수 5 = 이진수 101 (1×2² + 0×2¹ + 1×2⁰)
십진수를 이진수로 변환하는 방법
1. 십진수를 2로 나누고 몫과 나머지를 계산.
2. 나머지를 기록 : 나머지가 이진수의 각 자리를 나타냄
3. 몫이 0 이 될 때까지 반복 : 몫이 0 이되면 변환이 끝
4. 나머지를 거꾸로 읽음: 기록한 나머지를 역순으로 읽으면 이진수가 됨.
사용된 주요 메소드와 개념
- Integer.toBinaryString(i):
- 정수 i를 이진수 문자열로 변환.
- 예: 3 -> "11", 5 -> "101".
- Integer.parseInt():
- 문자열을 정수로 변환.
- 예: "11" -> 11.
- 리스트를 배열로 변환:
- list.stream().mapToInt(i -> i).toArray():
- 리스트를 스트림으로 변환한 후 각 요소를 int로 매핑하고 배열로 변환.
- list.stream().mapToInt(i -> i).toArray():
- 조건부 반환:
- list.isEmpty() ? new int[] { -1 } : ...
- 리스트가 비어 있으면 {-1}을 반환, 아니면 변환된 배열을 반환.
- list.isEmpty() ? new int[] { -1 } : ...
끝!
'코딩 테스트 > 문제' 카테고리의 다른 글
[백준 2588번] 곱셈 (0) | 2021.04.24 |
---|---|
[같은 숫자는 싫어] .intValue( ), Casting(형변환) (2) | 2021.04.15 |
[두개 뽑아서 더하기] Arrays.sort() 배열 정렬, length() / size() 비교 (1) | 2021.04.10 |
[완주하지못한 선수] getOrDefault, 컬렉션 프레임워크 (3) | 2021.04.09 |
[K번째 수] Arrays.copyOfRange (3) | 2021.04.09 |