원래 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 br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
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 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.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 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)를 사용할 수 있다.