๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿฆ• ๊ณต๋ฃก์ด ๋˜์ž!

[๋ฐฑ์ค€] Java ์ˆซ์ž์นด๋“œ 2 ๋ณธ๋ฌธ

Development/CodingTest

[๋ฐฑ์ค€] Java ์ˆซ์ž์นด๋“œ 2

Kirok Kim 2021. 12. 20. 21:50
1. 
import java.util.Scanner;

public class Test {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.nextLine();
		String ns = sc.nextLine();
		int m = sc.nextInt();
		sc.nextLine();
		String ms = sc.nextLine();
		String[] na = ns.split(" ");
		String[] ma = ms.split(" ");
		int[] answer = new int[m];
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (na[j].equals(ma[i])) {
					answer[i]++;
				}
			}
			if (i == m - 1) {
				System.out.print(answer[i]);
			} else {
				System.out.print(answer[i] + " "); 
			}
		}
		
	}
}
  • ์ตœ์ดˆ์—๋Š” ์ƒ๊ธฐ ๋‚ด์šฉ์œผ๋กœ ์ฝ”๋”ฉ์„ ํ–ˆ์—ˆ๋‹ค. ํ—Œ๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ.. ๊ธฐ์กด์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค๋ž‘์€ ๋‹ค๋ฅด๊ฒŒ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•˜๋Š”์ง€ ์ธก์ •ํ•˜์˜€๋‹ค.

 

2.
package tttt;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(br.readLine()); 
		String ns =br.readLine();
		int m =Integer.parseInt(br.readLine()); 
		String ms = br.readLine();
		String[] na = ns.split(" ");
		String[] ma = ms.split(" ");
		int[] answer = new int[m];
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < n; j++) {
				if (na[j].equals(ma[i])) {
					answer[i]++;
				}
			}
			if (i == m - 1) {
				System.out.print(answer[i]);
			} else {
				System.out.print(answer[i] + " "); 
			}
		}
		
	}
}
  • ๋‹ค์Œ์€ Scanner๋Œ€์ฒดํ•œ BufferedReader๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๋‹ค.. 

์ถœ์ฒ˜: https://algospot.com/forum/read/2496/ (*): ๋ฌธ์ž(์—ด) ์ •์ˆ˜ ๋ณ€ํ™˜ ํ•„์š”

  • java์—์„œ Scanner์™€ bufferdReader์˜ ๊ฒฝ์šฐ ์†๋„์ฐจ์ด๊ฐ€ ๊ฝค ๋‚œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๊ฐ€ ๋œ๋‹ค๋ฉด ์ด์ค‘ for๋ฌธ์—์„œ ์‹œ๊ฐ„์„ ๋งŽ์ด ์žก๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
  • ํ–ฅ์ƒ๋œ for๋ฌธ๊ณผ ์ผ๋ฐ˜ for๋ฌธ๊ณผ ์†๋„์ฐจ์ด๋Š” ์ „๋ฐ˜์ ์œผ๋กœ ํ–ฅ์ƒ๋œ for๋ฌธ์ด ์กฐ๊ธˆ ๋” ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•œ๋‹ค.

 

3 .์ด๋ถ„๋ฒ•์œผ๋กœ ํ‘ธ๋Š” ๋ฒ•
  • 1. scanner
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
		
		int N = in.nextInt();
		int[] arr = new int[N];
		
		for(int i = 0; i < N; i++) {
			arr[i] = in.nextInt();
		}
		
		Arrays.sort(arr);	// ์ด๋ถ„ ํƒ์ƒ‰์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค.
		
		int M = in.nextInt();
		
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i < M; i++) {
			int key = in.nextInt();
 
			// upperBound์™€ lowerBound์˜ ์ฐจ์ด ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
			sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
		}
		System.out.println(sb);
	}
 
 
	private static int lowerBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			/*
			 *  key ๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ
			 *  
			 *  (์ค‘๋ณต ์›์†Œ์— ๋Œ€ํ•ด ์™ผ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋„๋ก ์ƒ๊ณ„๋ฅผ ๋‚ด๋ฆฐ๋‹ค.)
			 */
			if (key <= arr[mid]) {
				hi = mid;
			}
 
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
 
	private static int upperBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
			if (key < arr[mid]) {
				hi = mid;
			}
			// ์ค‘๋ณต์›์†Œ์˜ ๊ฒฝ์šฐ else์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
	
}
  • ์œ„์˜ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋ž˜๋„ ๋ˆˆ์— ์ œ์ผ ์ต์„ ๊ฒƒ์ด๋‹ค.
		for(int i = 0; i < M; i++) {
			int key = in.nextInt();
 
			// upperBound์™€ lowerBound์˜ ์ฐจ์ด ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
			sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
		}
		System.out.println(sb);
	}
  • lowerBound์™€ upperBound์˜ ์ž‘์„ฑ ์ด์œ ๋Š” ์ด๋ถ„๋ฒ•์œผ๋กœ ์ฐพ์€ ์ค‘๋ณต๊ฐ’์˜ ์ธ๋ฑ์Šค๋ฅผ ๋นผ์„œ ๊ทธ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.
	private static int lowerBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			/*
			 *  key ๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ
			 *  
			 *  (์ค‘๋ณต ์›์†Œ์— ๋Œ€ํ•ด ์™ผ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋„๋ก ์ƒ๊ณ„๋ฅผ ๋‚ด๋ฆฐ๋‹ค.)
			 */
			if (key <= arr[mid]) {
				hi = mid;
			}
 
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
  • ์šฐ์„  lowerBound๋Š” ์ค‘๋ณต ๊ฐ’ ์ค‘ ์ธ๋ฑ์Šค๊ฐ€ ์ œ์ผ ๋‚ฎ์€ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๊ณ 
	private static int upperBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
			if (key < arr[mid]) {
				hi = mid;
			}
			// ์ค‘๋ณต์›์†Œ์˜ ๊ฒฝ์šฐ else์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
	
}
  • upperBound๋Š” ์ค‘๋ณต ๊ฐ’ ์ค‘ ์ธ๋ฑ์Šค๊ฐ€ ์ œ์ผ ๋†’์€ ์ˆ˜๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

 

  • 2. BufferedReader+StringTokenizer
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
import java.util.Arrays;
import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < N; i++) {
			arr[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(arr);
		
		int M = Integer.parseInt(br.readLine());
		
		st = new StringTokenizer(br.readLine()," ");
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i < M; i++) {
			int key = Integer.parseInt(st.nextToken());
 
			// upperBound์™€ lowerBound์˜ ์ฐจ์ด ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
			sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
		}
		System.out.println(sb);
	}
 
	private static int lowerBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			/*
			 *  key ๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ
			 *  
			 *  (์ค‘๋ณต ์›์†Œ์— ๋Œ€ํ•ด ์™ผ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋„๋ก ์ƒ๊ณ„๋ฅผ ๋‚ด๋ฆฐ๋‹ค.)
			 */
			if (key <= arr[mid]) {
				hi = mid;
			}
 
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
 
	private static int upperBound(int[] arr, int key) {
		int lo = 0; 
		int hi = arr.length; 
 
		// lo๊ฐ€ hi๋ž‘ ๊ฐ™์•„์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต
		while (lo < hi) {
 
			int mid = (lo + hi) / 2; // ์ค‘๊ฐ„์œ„์น˜๋ฅผ ๊ตฌํ•œ๋‹ค.
 
			// key๊ฐ’์ด ์ค‘๊ฐ„ ์œ„์น˜์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ
			if (key < arr[mid]) {
				hi = mid;
			}
			// ์ค‘๋ณต์›์†Œ์˜ ๊ฒฝ์šฐ else์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.
			else {
				lo = mid + 1;
			}
 
		}
 
		return lo;
	}
	
	
}
  • StringTokenizer
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
StringTokenizer st = new StringTokenizer(๋ฌธ์ž์—ด);
StringTokenizer st = new StringTokenizer(๋ฌธ์ž์—ด, ๊ธฐ์ค€๋ฌธ์ž);
StringTokenizer st = new StringTokenizer(๋ฌธ์ž์—ด,๊ธฐ์ค€๋ฌธ์ž,True/False);

while(st.hasMoreTokens())
  • ์ค‘๋ณต๋˜๋Š” ์ƒํ•œ ์ธ๋ฑ์Šค๊ฐ’ - ํ•˜ํ•œ ์ธ๋ฑ์Šค๊ฐ’
for(int i = 0; i < M; i++) {
			int key = Integer.parseInt(st.nextToken());
 
			// upperBound์™€ lowerBound์˜ ์ฐจ์ด ๊ฐ’์„ ๊ตฌํ•œ๋‹ค.
			sb.append(upperBound(arr, key) - lowerBound(arr, key)).append(' ');
		}
		System.out.println(sb);
	}
4. HashMap
๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
import java.util.StringTokenizer;
import java.util.HashMap;
 
 
public class Main {
 
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		/*
		 *  HashMap<Key, Value>
		 *  Key = ์ž…๋ ฅ๋˜๋Š” ์›์†Œ
		 *  Value = ์›์†Œ์˜ ๊ฐœ์ˆ˜(=์ค‘๋ณต ์ž…๋ ฅ ๋œ ์›์†Œ์˜ ์ˆ˜) 
		 */
		HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
		
		int N = Integer.parseInt(br.readLine());
		
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		for(int i = 0; i < N; i++) {
			int key = Integer.parseInt(st.nextToken());
			
			/* 
			 * getOrDefault(key, defaultValue)
			 * key์— ๋Œ€ํ•ด map์— ์ €์žฅ ๋œ value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
			 * ๋งŒ์•ฝ value๊ฐ€ ์—†์„ ๊ฒฝ์šฐ defaultValue๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
			 */
			map.put(key, map.getOrDefault(key, 0) + 1);
		}
		
		int M = Integer.parseInt(br.readLine());
		
		StringBuilder sb = new StringBuilder();
		
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < M; i++) {
			int key = Integer.parseInt(st.nextToken());
			
			sb.append(map.getOrDefault(key, 0)).append(' ');
		}
		
		System.out.println(sb);
	}
}
for(int i = 0; i < N; i++) {
			int key = Integer.parseInt(st.nextToken());
			
			/* 
			 * getOrDefault(key, defaultValue)
			 * key์— ๋Œ€ํ•ด map์— ์ €์žฅ ๋œ value๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
			 * ๋งŒ์•ฝ value๊ฐ€ ์—†์„ ๊ฒฝ์šฐ defaultValue๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
			 */
			map.put(key, map.getOrDefault(key, 0) + 1);
		}
  • key์— ์นด๋“œ์˜ ๊ฐ’์„ ๋„ฃ๊ณ  ๊ฐฏ์ˆ˜๋ฅผ ์„ผ๋‹ค.
		int M = Integer.parseInt(br.readLine());
		
		StringBuilder sb = new StringBuilder();
		
		st = new StringTokenizer(br.readLine(), " ");
		for(int i = 0; i < M; i++) {
			int key = Integer.parseInt(st.nextToken());
			
			sb.append(map.getOrDefault(key, 0)).append(' ');
		}
		
		System.out.println(sb);
	}
}
  • key์˜ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€ StringBuilder๊ฐ์ฒด ๋งŒ๋“ค๊ณ  ์ถœ๋ ฅ

 

์ถœ์ฒ˜ : https://st-lab.tistory.com/267

 

[๋ฐฑ์ค€] 10816๋ฒˆ : ์ˆซ์ž ์นด๋“œ 2 - JAVA [์ž๋ฐ”]

https://www.acmicpc.net/problem/10816 10816๋ฒˆ: ์ˆซ์ž ์นด๋“œ 2 ์ฒซ์งธ ์ค„์— ์ƒ๊ทผ์ด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆซ์ž ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N(1 ≤ N ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ˆซ์ž ์นด๋“œ์— ์ ํ˜€์žˆ๋Š” ์ •์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ˆซ์ž ์นด..

st-lab.tistory.com

 

๋ฐ˜์‘ํ˜•
Comments