문제풀이

[CODE UP 기초 종합 100제] 1023, 1082 with JAVA

IT록흐 2021. 6. 25. 08:08
반응형

 

 

코드업 100제를 풀어보았다.

풀면서 난해했던 문제들을

정리해볼까 한다.

 

 

 

문제 1023

 

[기초-입출력] 실수 1개 입력받아 부분별로 출력하기(설명)

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용

codeup.kr

 

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

 

[기초-종합] 16진수 구구단?

C언어기초100제v1.2 : @컴퓨터과학사랑, 전국 정보(컴퓨터)교사 커뮤니티/연구회 - 학교 정보(컴퓨터)선생님들과 함께 수업/방과후학습/동아리활동 등을 통해 재미있게 배워보세요.  - 모든 내용

codeup.kr

 

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진수로 바꾸어줄 수 있다.

 

 

Integer.parseInt() vs Integer.valueOf() 차이

자바에서 스트링을 숫자 값으로 변형할 때 Integer.parseInt() vs Integer.valueOf() 이 메소드를 많이...

blog.naver.com

(정확한 차이를 알고 싶은 분이라면 여기 참고!)

 

수의 본질은 같다. 표현법이 다른 것이다. 10진수, 8진수, 16진수, 2진수.. 표현법이 다를 뿐 본질은 같다. 그러므로 B*D 와 11*13와 값이 같다. 그러므로 11*13의 결과를 다시 16진수로 바꾸어준다.

 

Integer.toHexString(Integer.valueOf(input,16)*i)

 

 


 

정리

자바는 문자열이 정말 중요한 것 같다.

문자열 관련 메소드를 많이 알아두어야 겠다.

 

 

 

 

 

 

반응형