java for problem solving - GitDeveloperKim/DreamEach GitHub Wiki
- Ctrl + Shift + O : 자동 import
- 간단한 입출력 (테스트 케이스 없이 입력이 적은 경우에 사용)
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int a = 100;
double d = 1.1234567;
String str = String.format("문자열 서식: %05d", a); // string 으로 만들기
System.out.printf("%5d \n", a); // 자동 개행 안됨
System.out.printf("%.3f\n", d); // %.nf 소수점 아래 n번째 자리까지 출력 (반올림)
- import 추가
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
- throws 추가
import java.io.IOException;
public static void main(String[] args) throws IOException {}
- try with resources 사용
example
// try with resources
try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
} catch (IOException e) {
}
- 파일로부터 input 받는 법
public static void main(String[] args) throws FileNotFoundException {
System.setIn(new FileInputStream("C:\\filePath.txt"));
}
- BufferedReader 사용법
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine(); //String
int i = Integer.parseInt(br.readLine()); //Int
String [] str = br.readLine().split(" "); // 띄어쓰기로 스트링 저장
- StringTokenizer 사용법
StringTokenizer는 line단위로 갱신해줘야함
StringTokenizer st = new StringTokenizer(br.readLine()); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
-
String vs StringBuilder vs StringBuffer
String 비가변 스트링
StringBuilder 가변 스트링, 빠름
StringBuffer 가변 스트링, 동기화가 필요한 연산에 사용, 느림
click -
BufferedWriter 사용법
BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 반드시 flush() / close () 를 반드시 호출해 주어 뒤처리를 해주어야 한다.
자동 개행 기능이 없기 떄문에 개행을 해주어야 할 경우에는 \n를 통해 따로 처리해 주어야 한다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //할당된 버퍼에 값 넣어주기
StringBuilder s = "abcdefg"; // 출력할 문자열
s.append(answer+""); // 정답 문자열 추가
bw.write(s.toString()); // 버퍼에 있는 값 전부 출력
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
- 출처 click
011
111
110
for (int i = 1; i <= N; i++) {
String temp = br.readLine();
for (int j = 1; j <= M; j++) {
input[i][j] = temp.charAt(j-1)-'0'; // 숫자로 변경 코드
}
}
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
// String str = null;
String str = ""; // 초기화 안해주면 백준에서 nullpointer exception 발생 시킴
while ((str=br.readLine()) != null && str.length() != 0) {
StringTokenizer st = new StringTokenizer (str);
....
}
BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); // 정렬하여 배열에 넣는법 Stream int [] arr = Arrays.stream(br.readLine().split(" ")) .mapToInt(Integer::parseInt) .sorted() .toArray();
// .... // answer 는 리스트, ArrayList형 // 정렬하여 출력하기 answer.stream() .sorted() .forEach(d->System.out.print(d+" ")); //.forEach(System.out::println); //.forEach(System.out::print);
- Integer.parseInt(string);
- valueOf(Integer);
- int 형 범위 -21억 ~ 21억
- double
Arrays.sort(arr, (int []a, int []b)->a[0] - b[0]); // 오름차순
- Comparable - 이 인터페이스를 구현한 객체 스스로에게 부여하는 한 가지 기본 정렬 규칙을 설정하는 목적으로 사용
- Comparator - 이 인터페이스를 구현한 클래스틑 정렬 규칙 그 자체를 의미하며, 기본 정렬 규칙과 다르게 원하는 대로 정렬 순서를 지정
class Node implements Comparable {
int dst; // 다익스트라-> next node
int val; // 다익스트라-> 간선의 가중치
// Constructor
Node (int dst, int val) {
this.dst = dst;
this.val = val;
}
@Override
public int compareTo(Node next) {
return this.val - next.val; // 오름차순 정렬
}
}
class Point implements Comparable {
int node;
int value;
Point (int node, int value) {
this.node = node;
this.value = value;
}
@Override
public int compareTo(Point o) {
// 오름차순
if (this.value - o.value > 0) {
return 1;
} else if (this.value - o.value == 0) {
return 0;
} else {
return -1;
}
}
}
- 낮은 숫자부터 큰숫자로 오름차순으로 정렬
- Collections.serverOrder(), Comparable() 를 이용하여 변경
- peek() : top이 가리키는 데이터, 우선순위가 가장 높은 데이터
- poll() : 값을 반환하여 삭제
- offer(), add() : 값을 입력한다
package Practice;
import java.util.PriorityQueue;
public class Practice_20191110 {
public static void main(String[] args) {
PriorityQueue heap = new PriorityQueue<>(new Comparator() {
@Override
public int compare(int [] o1, int[] o2) {
return o1[1] - o2[1]; // 오름차순 정렬
}
});
heap.add(new int[] {100,5});
heap.add(new int[] {99,4});
heap.add(new int[] {98,3});
heap.add(new int[] {97,2});
heap.add(new int[] {96,1});
System.out.println("heap.poll()="+heap.poll()[0]); // 2번째 인자로 비교, 96출력
}
}
출처 click
pq = new PriorityQueue<>((int [] a, int [] b)-> (a[1] > b[1])? 1: -1); // int배열 두번째 요소를 이용하여 오름차순으로 우선순위 큐 선언