코드업 100제를 풀어보았다.
풀면서 난해했던 문제들을
정리해볼까 한다.
문제 1023
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String id;
double input;
input = sc.nextDouble();
String tmp = input+"";
System.out.println(tmp.substring(0,tmp.indexOf(".")));
System.out.println(tmp.substring(tmp.indexOf(".")+1));
}
}
<출력 결과>
처음에 나는 강제 형변환을 이용했다. double 형을 int로 강제형변환 시키면 정수 부분만 남고 정수부분을 입력받은 실수와 빼면 소수부분을 얻을 수 있다 생각했다. 하지만 소수부분이 0.414213으로 나왔다. 출력결과는 414213이 나와야한다.
그래서 해당방법을 포기하고
'문자열'로 접근했다.
실수를 입력받을 때는 double형으로 받고 double형에 ""를 추가하고 String변수에 담아 해당값을 문자열로 바꾸었다. String 변수는 String의 메소드를 사용할 수 있다.
substring()은 문자열의 일부분만 출력시킨다. indexof("a")는 문자열 중 "a"가 위치한 index를 반환한다. String은 char의 배열이다. 그러므로 인덱스로 접근가능하다.
substring(시작부분 인덱스, 끝부분 인덱스 ); // 시작부분 부터 끝부분 전까지 출력
문제 1082
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.next();
for(int i = 1; i<16; i++) {
System.out.println(input+"*"+Integer.toHexString(i).toUpperCase()+
"="+Integer.toHexString(Integer.valueOf(input,16)*i).toUpperCase());
}
}
}
<출력 결과>
Integer.toHexString(i).toUpperCase()
16진수는 문자도 포함되어 있으니 문자열로 입력을 받았다. 구구단을 출력시키는 것이니 1~15까지 for을 돌려야한다. 하지만 출력은 16진수로 해주어야한다. 그래서 Integer.toHexString(i)를 통해 10진수 정수 i를 16진수 문자열로 바꾸어주었다. 문자열은 toUpperCase()를 통해 대문자로 바꾸어줄 수 있다.
Integer.toHexString(Integer.valueOf(input,16)*i).toUpperCase()
문자열을 10진수 정수로 바꾸려면 Integer.valueof()와 Integer.parseInt()가 있다. 정수객체를 리턴하느냐 원시타입 정수를 리턴하느냐의 차이가 있다고는 하는데... 아직 내 수준에서는 래퍼클래스도 잘 모르기에 그냥 valueOf()를 썼다.
valueOf(String. radix)를 이용하여 input을 10진수로 바꾼다. radix에 8을 넣으면 8진수를 10진수로 바꾸어줄 수 있다.
(정확한 차이를 알고 싶은 분이라면 여기 참고!)
수의 본질은 같다. 표현법이 다른 것이다. 10진수, 8진수, 16진수, 2진수.. 표현법이 다를 뿐 본질은 같다. 그러므로 B*D 와 11*13와 값이 같다. 그러므로 11*13의 결과를 다시 16진수로 바꾸어준다.
Integer.toHexString(Integer.valueOf(input,16)*i)
정리
자바는 문자열이 정말 중요한 것 같다.
문자열 관련 메소드를 많이 알아두어야 겠다.
'문제풀이' 카테고리의 다른 글
[JAVA] 백준 3052번 나머지 : 중복값 제거 (0) | 2021.07.10 |
---|---|
[JAVA] 백준 1546번 평균 : 교환, 결합, 분배법칙 (0) | 2021.07.10 |
[JAVA] 백준 2884번 알람시계 : 시간 (0) | 2021.07.10 |
[JAVA] 백준 4673번 셀프넘버 : 아리토스테네스의 체 (0) | 2021.07.10 |
[CODE UP 기초 종합 100제] 1095, 1099 with JAVA (0) | 2021.06.27 |