자바 코딩테스트 기본 준비

Chooooo·2023년 12월 28일
0

자바 코딩테스트

목록 보기
1/4

😎 Java로 코테 준비

원래 python으로 코테를 준비하고 있다가 코딩테스트 언어가 java로 제한된 기업들이 생기기 시작해서.. java로 코테를 어느정도 확립하려고 한다. 기본적인 것들을 정리하고 들어가보자.

😁 기본 입출력

우선 기본 입출력을 할 줄 알아야 한다.

🐳 입력 받기

public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String stringInput = br.readLine();
        String[] listInput = br.readLine().split("");
        StringTokenizer st = new StringTokenizer(br.readLine());
        String A = st.nextToken();
    }

Scanner나 System.in.read를 사용하는 것이 일반적이나, 코딩테스트 용으로 빠르게 입력받기 위해서는 BufferedReader를 사용하며, StringTokenizer는 공백이 있는 경우 문자열이 공백처리를 땡겨 채우도록 하여 BufferedReader보다 더 빠르다고 한다.

BufferedReader, InputStreamReader는 java.io에 속하고, StringTokenizer는 java.util에 속한다.

BufferedReader 사용

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();

StringTokenizer

  • StringTokenizer는 공백이 있을 때 뒤에 문자열이 공백처리를 땡겨 채우도록 한다.
  • StringTokenizer가 BufferedReader보다 빠르게 사용될 수 있다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());

String A = st.nextToken();
String B = st.nextToken();
String C = st.nextToken();
String D = st.nextToken();

🐳 출력 받기

/**
         * 입력 BufferedReader , StringTokenizer 사용
         * 출력 StringBuilder 사용
         */
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        // n , m 입력 받음
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        
        // nxm 크기 배열 입력 받음.
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j = 0; j < m; j++) {
                arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                sb.append(arr[i][j]);
            }
            sb.append("\n");
        }

StringBuilder

  • 그냥 문자열이기 때문에 매우 간단하다.
StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b").append(" ");
sb.append("c").append("\n");
System.out.println(sb);

전체 과정

// Buffered Reader를 통해, 시스템기본(키보드) 입력을 목적으로, 인풋스트림리더를 하나 만든다.
        // 그 후, br.readLine() 메서드로 한줄 읽고, " "를 기준으로 자른다. 그 후, stk에 저장.        
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer stk = new StringTokenizer(br.readLine()," ");  // 읽은 라인을 " "으로 자른다.

		// 자른 것 중 하나를 n에 저장 후, 그 다음 것을 m에 저장.
		int n = Integer.parseInt(stk.nextToken());
		int m = Integer.parseInt(stk.nextToken());

		// 그 다음 부터 행의 갯수만큼 라인을 입력받아서, StringTokenizer로 자를 예정임.
		for (int i = 0; i < n; i++) {
			stk = new StringTokenizer(br.readLine(), " ");
			for (int j = 0; j < m; j++) {
				arr[i][j] = Integer.parseInt(stk.nextToken());
			}			
		}
		
		// << 출력부 >> (테스트하기)
		StringBuilder sb = new StringBuilder();
		sb.append("n : " + n + ", m : " + m).append('\n');
		
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < m; j++) {
				sb.append(arr[i][j]);
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}
4 3
1 2 3
3 4 5
6 7 1
1 2 3
아래는 출력부
n : 4, m : 3
123
345
671
123

진짜 다행인건 프로그래머스에서 코테치면 입력부는 신경쓰지 않아도 된다.

😁 문자열 다루기

python의 가장 강점은 문자열 다루기.
그래서 파이썬에서는 문자열을 항상 간단하게 풀었었는데, java로 풀려니 문자열을 어떻게 다룰지부터 걱정이 생긴다.

대문자, 소문자 판별

Character.isLowerCase(x)
Character.isUpperCase(x)

Character.toUpperCase(x)
Character.toLowerCase(x)

Character 타입 판별

Character.isAlphabetic(x)
Character.isDigit(x)

특정 단어의 인덱스 값, 인덱스 값에 위치한 단어

str.indexOf('W');
str.charAt(idx);

알파벳만 필터링

str = str.toUpperCase().replaceAll("[^A-Z]", "");

문자열 거꾸로

String tmp = StringBuilder(str).reverse().toString();

문자열 나누기

str = str.subString(7); //7 이후부터
str = str.subString(5,12); //5부터 12까지

StringBuffer

StringBuffer sb = new StringBuffer();
sb.append("abcdef");
sb.insert(0, "a"); //해당 인덱스에 해당값 삽입
sb.substring(0,4); //문자열 나누기 0부터 4까지
sb.reverse(); //뒤집기
sb.toString(); //String 형태로 변경

조건들

필터 조건 : Character 타입으로 변환 후에 is 함수 또는 if 조건문 사용
중복 문자 : indexOf() 활용하면 맨 처음에 발견하는 것을 가져온다. -> 중복 제거 유리
String : 불변객체, 새로 참조할 때마다 새 메모리 참조 <-> StringBuilder : 가변객체
replace : chain형으로 여러번 사용 가능

  • temp.replace("#", "1").replace("*","0");

String -> Char : charAt(idx) (한 글자만) or toCharArray() (전체) -만 이때 특수문자나 공백도 인덱스에 포함되므로 주의
char -> String : valueOf(변수) : (char, char[]) 둘 다 들어갈 수 있다.
Character.toString(변수) (이때는 char[]는 불가능함)

StringBuilder의 경우 삭제는 deleteCharAt(idx)를 사용할 수 있다.

  • delete(시작인덱스, 끝인덱스)를 사용해서 삭제할 수도 있다.
  • 값을 변경하려면 setCharAt(인덱스, 문자)를 사용할 수 있다.
  • 값을 삽입하는 것은 insert(인덱스, 문자)를 사용할 수 있다.
profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글