보물 상자 비밀번호

문제 핵심

  • 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"를 반환한다!

Integer.toHexString(13); // 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번째 풀었을 때 틀린 이유

  1. 진법 변환할 때 스코프 틀림. ① 2중 for문 돌면서 N/4개씩 끊어서 문자열 가져온다. ② 1의 문자열을 진법 변환한다. =>1에서 2중 for문 다 돌고, 문자열 완성한 후에 진법 변환 진행해야하는데, 2중 for문 안에 진법 변환 로직을 넣어버렸다. 이렇게 되면 문자열 완성할 때마다 진법 변환을 진행하게 되기 때문에 틀렸다.

static void hextoDec() {//현재 16진수를 10진수로 변환후 리스트에 저장.
		for(int i=0;i<N;i+=N/4) {
			String hex = "";
			for(int j=i;j<i+N/4;j++) {
				hex += Input[j];
			}
			int dec = Integer.parseInt(hex,16);
			result.add(dec);
		}
	}

2. HashSet()을 이용한 중복 제거 16진수를 10진수로 변환하여 저장할 때 중복되는 수가 있을 수 있다. 그렇기 때문에 중복되는 수를 제거해야하는데, 이 때 Set에 저장함으로써 중복을 제거할 수 있다! Set컬렉션은 기본적으로 중복되는 원소를 허용하지 않기 때문이다!

Last updated