보물 상자 비밀번호
문제 핵심
16진수 => 10진수 진법 변환 : Integer.parseInt(String,16) = String을 16진수라고 생각하고, 10진수로 변환!
내림차순 정렬 : list 컬렉션에 저장하여 Collections.reverseOrder() 이용
Java 진법 변
java.lang패키지에 있는 Integer클래스는 10진수 값을 16진수로 바꾸고 16진수를 10진수로 바꿔주는 함수를 지원한다.
10진수 -> 16진수 String
static String toHexString(int i) 매개변수로 들어온 i값을 양수 16진수로 String값으로 바꾸어 반환한다.
사용예시 : 인수로 전달된 int 값 13을 양수 16진수로 String 값으로 바꾸어 리턴한다. 16진수에서 13 = d 이기 때문에 "d"를 반환한다!
16진수에서 10 = a 11 = b 12 = c 13 = d 14 = e 15 = f 16 = 11이므로 13을 입력하면 "d"가 반환된다.
참고로 10진수 -> 2진수(toBinaryString) 8진수(toOctalString) 변환도 있다. 10진수를 2진수로, 10진수를 8진수로 변환.
Integer클래스가 지원하는 parseInt()함수는 3가지가 있다. -매개변수가 다르므로 각각의 상황에 따라 호출된다.
가장 많이 쓰는 것은 static int parseInt(String s) : 매개변수로 들어온 s값을 10진수 int로 반환한다.
두 번째는 위에서 다룬 static int parseInt(String s, int radix)는 radix진수로 쓰여진 s를 10진수 int형으로 반환한다.
마지막으로 static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix)는 주어진 s의 beginIndex에서 endIndex-1까지의 문자열을 radix진수 값으로 보고 이를 10진수 int값으로 반환한다.
2번째 풀었을 때 틀린 이유
진법 변환할 때 스코프 틀림. ① 2중 for문 돌면서 N/4개씩 끊어서 문자열 가져온다. ② 1의 문자열을 진법 변환한다. =>1에서 2중 for문 다 돌고, 문자열 완성한 후에 진법 변환 진행해야하는데, 2중 for문 안에 진법 변환 로직을 넣어버렸다. 이렇게 되면 문자열 완성할 때마다 진법 변환을 진행하게 되기 때문에 틀렸다.
2. HashSet()을 이용한 중복 제거 16진수를 10진수로 변환하여 저장할 때 중복되는 수가 있을 수 있다. 그렇기 때문에 중복되는 수를 제거해야하는데, 이 때 Set에 저장함으로써 중복을 제거할 수 있다! Set컬렉션은 기본적으로 중복되는 원소를 허용하지 않기 때문이다!
Last updated