java for problem solving - GitDeveloperKim/DreamEach GitHub Wiki

eclipse ๋‹จ์ถ•ํ‚ค

  • Ctrl + Shift + O : ์ž๋™ import

์ž๋ฐ” ์ž…์ถœ๋ ฅ

  • ๊ฐ„๋‹จํ•œ ์ž…์ถœ๋ ฅ (ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์—†์ด ์ž…๋ ฅ์ด ์ ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ)

Scanner in = new Scanner(System.in);
int a = in.nextInt();
  • ์„œ์‹๋ฌธ์ž (์†Œ์ˆซ์  ์ถœ๋ ฅ) click click

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** โš ๏ธ