Study/Algorithm

자바 알고리즘 풀이를 위한 것들

의미없는 시간은 없다. 2022. 6. 26. 23:47

문자열 관련

String과 StringBuilder

문자열을 붙일때 String으로 진행하면 메모리할당과 해제를 반복하므로 StringBuilder가 더 효율적이다.

public class Main {
    public static void main(String args[]){
        String str1 = "문자열1";
        String str2 = "문자열2";
        System.out.println(str1+str2);
        
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("test ").append("append");
        String str = stringBuilder.toString();
        //String str = stringBuilder;   
        // String에 StringBuilder를 그대로 넣을 순 없다. toString()을 붙여야 한다
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.toString());
    }
}

삼항 연산자( 조건문? 참:거짓) (예시)

class Solution {
    public String solution(int num) {
        String answer = "";
        //num은 0이상의 자연수만 입력가능할때
        //num값을 2로 나누었을때, 나머지가 0이면 Even을 홀수면 Odd를 반환한다.
        answer = num%2 ==0? "Even":"Odd" ;
        return answer;
    }
}

Math 클래스(import java.lang.Math에 포함되어있어서 따로 선언하지 않아도됨)

System.out.println(Math.min(1,100)); //1
System.out.println(Math.max(1,100)); //100
System.out.println(Math.abs(-10));   //10

System.out.println((int)(Math.random() * 10));     // 0~9 사이 난수 발생
System.out.println((int)(Math.random() * 100));  // 0~99 사이 난수 발생
System.out.println((int)(Math.random() * 1000)); // 0~999 사이 난수 발생

double a= 3.141592;
System.out.println("첫째 자리 반 올림 : " + Math.round(a));
System.out.println("둘째 자리 반 올림 : " + Math.round(a * 10) / 10.0);

System.out.println("첫째 자리 올림 : " + Math.ceil(a));
System.out.println("셋째 자리 올림 : " + Math.ceil(a * 100) / 100.0);

System.out.println("첫째 자리 버림 : " + Math.floor(a));
System.out.println("넷째 자리 버림 : " + Math.floor(a * 1000) / 1000.0);

System.out.println(Math.pow(5,3)); //5의3제곱
System.out.println(Math.sqrt(16)); //16의 제곱근 4
System.out.println(Math.subtractExact(5,10)); //두수의 차이 음수로도 나오므로 절대값으로 감싸주는것도 좋음

자료형 변경 및 확인

System.out.println(str.getClass().getName()); //return java.lang.String
Integer.parseInt(str); //str 문자열을 Int형으로 변환
Integer.toString(int); //숫자형을 문자열로 변환
// 숫자형변수+""; 이렇게만해도 숫자형이 문자형으로변환됨

 

값을 입력 받을때

1.Scanner(예시)

import java.util.Scanner; //util.Scanner클래스를 임포트 한다.

Scanner sc  = new Scanner(System.in); //여기에서 System.in 는 입력한 값을 바이트 단위로 읽음
String name = sc.next();              //공백이전까지의 문자열을 입력받음
int name    = sc.nextInt();           //공백이전까지의 숫자열 입력받음
double name = sc.nextDouble();        //공백이전까지의 실수 입력받음
String name = sc.nextLine();          //문자열 전체를 입력받음
char name   = sc.next().charAt(idx);  //문자열 중 idx번째의 값만 가져옴 idx가 1이고 abcde입력시에 b를 반환

2.BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class test {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
        System.out.println("원하는 문자 하나를 입력하세요.");
        String s = br.readLine();
        System.out.println("원하는 숫자 하나를 입력하세요.");
        int i = Integer.parseInt(br.readLine());

        System.out.println("String : " + s);
        System.out.println("Int : " + i);
    }
}

 

여기에서 Scanner와 BufferedReader의 차이는

위는 Scanner 아래는 BufferedReader

이고 일반적으로 입력받을때 Scanner를 쓰지만, 알고리즘 공부를하면 입력때 배우는게 BufferedReader다. 왜냐면 Scanner에 비해서 속도가 엄청나게 빠르기때문이다. 그러므로 알고리즘 공부를하면 꼭 익혀두는게 좋다고 생각한다.

 

코딩테스트 참고

코딩테스트 준비방법 -쩜튜브https://solved.ac/problems/level 실버까진 풀자 SQL은 프로그래머스  (링크) 

 

반응형