Algorithm

๋ฐฑ์ค€ 7568 | ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๋ฉ์น˜

osean 2020. 10. 18. 03:09

์™„์ „ ํƒ์ƒ‰

์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋ฅผ ๋ณผ ๋•Œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ถœ์ œ ๋นˆ๋„๊ฐ€ ๋†’์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ทธ๋ฆฌ๋””์™€ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์ฃผ์ฐจ ๋ฌธ์ œ๋„ ๊ทธ๋ฆฌ๋””, ์™„์ „ ํƒ์ƒ‰ ๊ทธ๋ฆฌ๊ณ  ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๊ณต์ง€ํ–ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋„๋Œ€์ฒด ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ญ˜๊นŒ?

 

์™„์ „ํƒ์ƒ‰

'๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ์ฐพ์•„์„œ ๋‹ต์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜' ์„ ๋œปํ•œ๋‹ค. ์˜์–ด๋กœ๋Š” Exhaustive Search ๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ•ด๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€๋•Œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๊ณ  ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด์ง€๏ฟฝ

velog.io

(์œ„ ๋ธ”๋กœ๊ทธ์—์„œ ์•„์ฃผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค.)

์œ„ ๊ธ€์—์„œ ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜๋กœ

  • Brute Force : for๋ฌธ๊ณผ if๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋น„ํŠธ ๋งˆ์Šคํฌ : ์ด์ง„์ˆ˜ ํ‘œํ˜„์„ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์“ฐ๋Š” ๊ธฐ๋ฒ• (AND, OR, XOR, SHIFT, NOT)
  • ์žฌ๊ท€ ํ•จ์ˆ˜
  • ์ˆœ์—ด : ์„œ๋กœ ๋‹ค๋ฅธ n๊ฐœ์˜ ์›์†Œ์—์„œ r๊ฐœ์˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ˆœ์„œ๋Œ€๋กœ ๋Š˜์–ด ๋†“์€ ์ˆ˜
  • BFS(๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰), DFS(๊นŠ์ด์šฐ์„ ํƒ์ƒ‰)

๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋ฒˆ์— ์ถœ์ œ๋œ ๋ฉ์น˜ ๋ฌธ์ œ๋Š” Brute Force(๋ธŒ๋ฃจํŠธ ํฌ์Šค) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, for๋ฌธ๊ณผ if๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์€ ํ’€์ด๊ฐ€ ์‰ฌ์šด ๋งŒํผ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋Œ€ํ‘œ์ ์œผ๋กœ

  • ๋น„๊ตํ•ด์•ผ ํ•  ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ๋งŽ์•„์งˆ ์ˆ˜๋ก ๋Ÿฐํƒ€์ž„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.
  • ๊ฐ™์€ ์ด์œ ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ๋งŽ์ด ์žก์•„ ๋จน๋Š”๋‹ค.

ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, 1๋ถ€ํ„ฐ 1000์–ต๊นŒ์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”

100,000,000,000 * 100,000,000,000 = ์ƒ๊ฐํ•˜๊ธฐ๋„ ์‹ซ์Œ

์ƒ๊ฐํ•˜๊ธฐ๋„ ์‹ซ์„ ๋งŒํผ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์—์„œ ๋งํ•œ ๋ฌธ์ œ์ ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์›ƒ๊ธด ์ ์€ ๋งˆ์น˜ ๋ฒ„๋ธ” ์ •๋ ฌ๊ณผ ์กฐ๊ธˆ ๋น„์Šทํ•œ ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค. ๋ฒ„๋ธ” ์ •๋ ฌ๋„ ์ž์‹ ์˜ ์œ„์น˜์—์„œ ๋’ค์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ˆ˜์™€ ๋น„๊ต๋ฅผ ํ•˜๋Š”๋ฐ ์™„์ „ ํƒ์ƒ‰์„ ์กฐ๊ธˆ ๋” ๋ฐœ์ „ํ•œ ๊ฒƒ์ด ๋ฒ„๋ธ” ์ •๋ ฌ ์•„๋‹๊นŒ ์ƒ๊ฐํ•ด๋ณธ๋‹ค! (์•„๋‹๊ฑฐ๋‹ค๐Ÿคฅ)

๋ฉ์น˜ ๋ฌธ์ œ

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’(String)์„ int๋กœ ๊ฐ๊ฐ ๋ณ€ํ™˜ ํ›„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ค์› ๋‹ค.

  1. StringTokenizer ํด๋ž˜์Šค๋Š” delim(๊ตฌ๋ถ„์ž)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ Token์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  2. ์ด Token์€ ํ•œ ๋ฒˆ ํ˜ธ์ถœํ•˜๊ณ  ๋‚˜๋ฉด ์‚ญ์ œ๋œ๋‹ค.
  3. ๋งˆ์น˜ Set ์ž๋ฃŒ ๊ตฌ์กฐ ๊ฐ™๊ตฌ๋‚˜.
 

[๊ฐ„๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜] 2. ๋ชจ๋‘ ๋‹ค ํ•ด๋ณธ๋‹ค - ๋ธŒ๋ฃจํŠธ ํฌ์Šค(Brute Force) — Steemit

์•ˆ๋…•ํ•˜์„ธ์š”, ๊ณ„๋žต์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…์„ ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ž˜ ์ฝ์–ด์ฃผ์…จ๋‹ค๋‹ˆ ๋‹คํ–‰์ž…๋‹ˆ๋‹ค :) ๋ถ„๋Ÿ‰์ด ์งง๋‹ค๊ณ  ํ•˜์‹œ๋Š” ๋ถ„๋„ ๊ณ„์…จ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€๏ฟฝ๏ฟฝ

steemit.com

๋‚˜๋Š” ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ int[][] 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ StringTokenizer ๊ฐ์ฒด๋„ n๊ฐœ ๋งŒํผ์˜ 1์ฐจ์› ๋ฐฐ์—ด๋กœ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค.
๊ทธ ํ›„์— StringTokenizer ๊ฐ ์ธ๋ฑ์Šค๋งˆ๋‹ค ์–ด๋–ค ๊ตฌ๋ถ„์ž๋กœ Token์„ ํ•ด๋‹น ์ธ๋ฑ์Šค ์•ˆ์— Token์œผ๋กœ ์ €์žฅํ•  ๊ฒƒ์ธ์ง€ ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธ ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

  • ์ž…๋ ฅ ๋ฐ›์€ ๋ฌธ์ž์—ด์„ int[][] 2์ฐจ์› ๋ฐฐ์—ด๋กœ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ

๊ทธ๋ฆผ์„ ์–ด๋–ป๊ฒŒ ๊ทธ๋ ค์•ผ ํ• ์ง€ ๋ชฐ๋ผ์„œ ์†์ฝ”๋”ฉ์ฒ˜๋Ÿผ ์ ์–ด ๋ณด์•˜๋‹ค!
StringTokenizer ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๊ทธ๋ฆผ์€ ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

java stringtokenizer : ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅธ๋‹ค.

 Java์—์„œ ๊ตฌ๋ถ„์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘, StringTokenizer๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ „์—, token์ด๋ž‘, ๊ตฌ๋ถ„์ž์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์งš๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๏ฟฝ๏ฟฝ

codingdog.tistory.com

์ด์ œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด ๋ณผ ์ฐจ๋ก€๋‹ค. ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ int ์ž๋ฃŒํ˜•์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค๋ฉด, ์ด์ œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค.
์ฆ‰, ์ด 5๋ช…์˜ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ–ˆ์„ ๋•Œ, ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค๊ณผ ๋น„๊ตํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š”

(5-1) * 5 = 20
๊ฒฝ์šฐ์˜ ์ˆ˜ = 20๊ฐœ

๊ทธ๋ฆผ์„ ๋„ˆ๋ฌด ๋ชป ๊ทธ๋ ธ์ง€๋งŒ ์ž์‹ ์„ ์ œ์™ธํ•œ ์‚ฌ๋žŒ๋“ค์„ ๋น„๊ตํ–ˆ์„ ๋•Œ ๊ทธ๋ ค์ง€๋Š” ๋ชจ์–‘์€ ์œ„์™€ ๊ฐ™๋‹ค. ์ด ๊ฒƒ์„ ์ฝ”๋“œ๋กœ ํ™•์ธ ํ•ด๋ณด์ž!

  • ์œ„ํ’๋‹น๋‹น ์™„์ „ ํƒ์ƒ‰ ์ฝ”๋“œ

      package ์‹ฌ์„ฑํ—Œ.์•Œ๊ณ ๋ฆฌ์ฆ˜_3์ฃผ์ฐจ;
    
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.util.StringTokenizer;
    
      public class ๋ฉ์น˜_7568 {
          public static void main(String[] args) throws NumberFormatException, IOException {
    
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              StringBuffer sb = new StringBuffer();
              int n = Integer.parseInt(br.readLine());
              int[][] people = new int[n][2];
    
              StringTokenizer[] st = new StringTokenizer[n];
              for (int i = 0; i < n; i++) {
                  int m = 0;
                  st[i] = new StringTokenizer(br.readLine(), " ");
                  while (st[i].hasMoreTokens()) {
                      people[i][m] = Integer.parseInt(st[i].nextToken());
                      m++;
                  }
    
              }
    
              for (int i = 0; i < people.length; i++) {
                  int rank = 1;
                  for (int k = 0; k < people.length; k++) {
                      boolean check = (people[i][0] < people[k][0]) && (people[i][1] < people[k][1]) &&(i != k);
                      if (check) {
                          rank++;
                      }
                  }
                  sb.append(rank + " ");
              }
              System.out.println(sb.toString());
          }
    
      }

์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ–ˆ์„ ๋•Œ, ๋‹ค์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์‹ ์„ ๋œปํ•˜๋Š” i, i์™€ ๋น„๊ตํ•  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋œปํ•˜๋Š” k.
์ฆ‰, i๋ฅผ ๊ธฐ์ค€์œผ๋กœ k ๋ฅผ ๋น„๊ตํ•˜๋ฉด ๋œ๋‹ค. ์ด ๋•Œ, i ๋ณด๋‹ค ๋ชธ๋ฌด๊ฒŒ, ํ‚ค๊ฐ€ ํฌ๋‹ค๋ฉด count ๊ฐ’์ด + 1 ์ฆ๊ฐ€ํ•œ๋‹ค.

์ด์ œ i ์— ํ• ๋‹น๋œ count๋ฅผ StringBuffer ๊ฐ์ฒด์— ์ €์žฅํ•˜์—ฌ ์ด๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ์™„๋ฃŒ!