java for problem solving - GitDeveloperKim/DreamEach GitHub Wiki

eclipse 단축키

  • 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();   //스트림을 닫음

입력이 붙어있는 문자열로 주어졌을 때

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'; // 숫자로 변경 코드
	}
}

input


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);
   ....
}

자바 Stream (map, sorted, toArray)


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

람다, sorting


Arrays.sort(arr, (int []a, int []b)->a[0] - b[0]);    // 오름차순

Comparator 와 Comparable 차이 + 람다

reference

  • Comparable - 이 인터페이스를 구현한 객체 스스로에게 부여하는 한 가지 기본 정렬 규칙을 설정하는 목적으로 사용
  • Comparator - 이 인터페이스를 구현한 클래스틑 정렬 규칙 그 자체를 의미하며, 기본 정렬 규칙과 다르게 원하는 대로 정렬 순서를 지정

Comparable <클래스 인터페이스 상속>


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;
		}
	}
}

Comparator 사용법 <자바 우선순위 큐 (힙) >

  • 낮은 숫자부터 큰숫자로 오름차순으로 정렬
  • 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배열 두번째 요소를 이용하여 오름차순으로 우선순위 큐 선언 
⚠️ **GitHub.com Fallback** ⚠️