1001번부터 1099번까지 기초 100문제를 자바로 풀어보았다.
자바를 기초부터 다시 리마인드할 수 있었다😆
출력
" 출력을 원한다면 System.out.printf(" \"");
\출력을 원한다면 System.out.printf(" \\");
문자열은 공백없이 붙게된다, 공백을 위해 " "추가해도 된다 System.out.println(a+" "+b);
년월일을 출력할때 System.out.printf("%04d.%02d.%02d",year,month,day);
%02d 2칸을 이용해 출력하는데, 2칸이 아니면 0을 붙인다라는게 포함
number의 변수를 출력시에 11자리까지 반올림해서 출력하겠다System.out.printf("%.11f",number);
8진수, 16진수 출력시 System.out,printf("%o,%x,%X")
16진수 대문자출력을 원하면 %X
입력
정수 scanner.nextInt();
, scanner.nextLong();
int형보다 큰 Long
실수 scanner.nextFloat();
16진수로 받고싶다면, scanner.nextInt(16);
String형으로 받는 scanner.next();, scanner.nextLine();
scanner.nextLine();
은 공백을 포함해서 받기때문에 split()이 필요
String number = scanner.nextLine();
String [] str = number.split("");
int a = Integer.parseInt(str[0]) ;
split("") 은 공백을 기준, 한문자씩 자를때 사용한다
한문자씩 자르고 난후에 변환을 해줘도 된다. Integer.parseInt()
으로 int형으로 변환
실수를 정수, 소수로 나누고 싶다면 split("\\.")
을 해준다
string에서 변환을 해줄수도 있다 -> 소숫점 아래 6자리까지 받고싶다
String a = sc.nextLine();
String x6 = String.format("%.6f",a);
StringTokenizer
간단하게 문자열을 토큰단위로 나눠주는 함수 (split과 동일하게 쪼갠다 )
hasMoreTokens이라는 내장함수가 존재 -> 토큰이 남았는지 확인하는 메소드
import java.util.StringTokenizer; //import에다가 부르기
String date = sc.nextLine();
StringTokenizer token = new StringTokenizer(date,".");
int [] arr = new int[3];
while(token.hasMoreTokens()){
arr[i] = Integer.parseInt(token.nextToken());
i++;
}
split 대신에 토큰을 사용함으로서, 남아있는 토큰이 있는지 확인할 수 있다.
변환
8진수->10진수 int num = Integer.valueOf(number,8);
string형->문자형 char c = sc.nextLine().charAt(0);
아스키코드값은 char형이어야 출력이 된다 char c = (char)num;
연산자
~,&,|,<<,>>
비트연산자는 bit로 계산을 한 후에 10진수로 출력한다
시프트 연산자 <<
는 2를 곱하고, >>
는 2를 나누어야한다
a<<b
는 a를 b만큼 거듭제곱하는것이다.
자바에선 제곱연산자 대신에 제곱함수Math.pow(a,b)
를 사용한다.
등차수열, 등비수열
등차: a + d*(n-1)
등비: (a*Math.pow(r,n-1))
세개의 숫자 중에서 가장작은 숫자는?
(a<b?:a:b)<c?:(a<b?:a:b):c
으로 구하면 된다.
여러 숫자중에서 가장 작은 숫자는?
min
이라는 변수를 하나 만들어 계속 비교하는식으로 해야한다
%나머지 연산자가 쓰일때
짝수, 홀수인지 확인할때 a%2 ==0
0이면 짝수
최소공약수 , 두개를 무언가가 만족할때를 구할때
day%a==0, day%b==0
day는 a, b를 모두 만족할때 구한다
조건문, 반복문
for(){
if()continue;
System.out.println(3);
}
if문을 만족한다면 continue를 실행하게 된다.
continue문은 다음반복으로 바로 진행한다 -> 즉 3은 출력되지 않는다.
if()
else if()
else
else if 문도 조건써줘야 한다.
switch(num){
case 1: System.out.println(1);
case 2: System.out.println(2); break;
default: break;
}
break 문이 없는 case 1이 실행된다면 case2문까지 출력된다
break문 필수~
이중배열
배열선언
int [] arr = new int[크키];
int [][] arr = new int[크][기];
배열조회
for(int i =0; i<arr.length; i++){
for(int j =0; j<arr[i].length; j++){
System.out.println(arr[i][j]);
}
}
이렇게 행부터 쓰면 arr[0][0]부터 조회가 된다.
BufferReader, BufferWriter
-> 버퍼를 이용해 읽고 쓰는 함수
-> 버퍼를 활용하기에, 기존의 scanner, println 보다 빠르다
-> 받는 데이터가 String형으로 받기에, 형변환을 따로 해줘야한다
-> 데이터를 라인단위로 읽을 수 있다.
import java.io.BufferedReader;
import.java.io.BufferedWriter;
import.java.io.InputStreamReader;
import.java.io.OutputStreamReader;
throws IOException
두가지를 해줘야 BufferedReader, BufferedWriter를 쓸 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String arr[] = br.readLine().split(""); //라인단위로 읽은 후에, split으로 쪼개기
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write(i+k); //print대신에 write를 써주면 된다.
//flush(). close()는 반드시 필요
bw.flush(); //남은거 모두 출력하는 메소드
bw.close();