๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/Java

[Java] Chapter04: ๋๋ง์ž‡๊ธฐ ๊ฒŒ์ž„ (Word Chain)

by HanaV 2023. 4. 10.
728x90

n๋ช…์ด ์ฐธ๊ฐ€ํ•˜๋Š” ๋๋ง์ž‡๊ธฐ ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด๋ณด์ž. ์ฒ˜์Œ ๋‹จ์–ด๋Š” '๋ผ๋ฉด'์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ๊ณ , ์›ํ•˜๋Š” ์ฐธ๊ฐ€ ์ธ์›์ˆ˜๋ฅผ ์ •ํ•ด ์ด๋ฆ„์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜์—ฌ, ์‹œ๊ฐ„์„ ์žฌ์„œ 10์ดˆ๊ฐ€ ์ง€๋‚˜๋ฉด ๋‹จ์–ด๋ฅผ ๋งž๊ฒŒ ์ž…๋ ฅํ•ด๋„ ํŒจ๋ฐฐ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋งŒ๋“ค๋„๋ก ํ•˜์ž.

 

1. ์ž…๋ ฅํ•œ ์ฐธ๊ฐ€์ธ์›(Player) ์ˆ˜๋งŒํผ์˜ value๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

1-1. Player ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ์ฐธ๊ฐ€์ธ์›์ˆ˜(number)๋งŒํผ์˜ ๊ฐœ์ˆ˜์˜ Player ๊ฐ์ฒด ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค.

2. ๊ธฐ๋ณธ์ ์ธ ๊ฒŒ์ž„ ๊ทœ์น™์„ ์ ์šฉ์‹œ์ผœ์•ผํ•œ๋‹ค. ๋จผ์ € ๋ง์ด ์ด์–ด์ง€๋„๋ก ์ž…๋ ฅ๋˜๋Š” ๋‹จ์–ด(new word)์˜ ์ฒซ ๊ธ€์ž์™€ ์ „์— ์ž…๋ ฅ๋œ ๋‹จ์–ด(last word)์˜ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

2-1. string์˜ ์ฒซ๊ธ€์ž์™€ ๋งˆ์ง€๋ง‰๊ธ€์ž๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ substring์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  -๋งˆ์ง€๋ง‰ ๋ฌธ์ž์— ๋Œ€ํ•œ ์ธ๋ฑ์Šค: lastWord.length()-1
  - substring() ํ•จ์ˆ˜: ์ž…๋ ฅ๋ฐ›์€ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ž์—ด์„ ์ž˜๋ผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜
  -๋งˆ์ง€๋ง‰ ๋ฌธ์ž: substring(last.length()-1)
  -์ฒซ๋ฒˆ์งธ ๋ฌธ์ž: substring(0, 1)
2-2. ์ฒซ๊ธ€์ž์™€ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ณ„์† ๋ฐ˜๋ณต๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ, while๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ฒ˜์Œ ๋‹จ์–ด๋Š” ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, while๋ฌธ ์‹œ์ž‘ ์ด์ „์— last word = '๋ผ๋ฉด'์œผ๋กœ ์ •ํ•œ๋‹ค.
2-3. new word๋ฅผ scanner๋กœ ๋ฐ›๊ณ , ์ฒซ๊ธ€์ž์™€ ๋งˆ์ง€๋ง‰๊ฐ€ ๊ฐ™์œผ๋ฉด(String์ด๋ฏ€๋กœ equals๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค) continue๋กœ while๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋„๋ก ํ•˜๊ณ , ๋‹ค๋ฅด๋ฉด break๋กœ ํƒˆ์ถœํ•œ๋‹ค.
2-4. ๊ธ€์ž๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฒŒ์ž„์ด ์ด์–ด์ ธ์•ผํ•˜๋ฏ€๋กœ new word์˜€๋˜ ๋‹จ์–ด๊ฐ€ last word๊ฐ€ ๋˜๊ณ , new word๋Š” ๋‹ค์‹œ scanner๋กœ ์ž…๋ ฅ๋ฐ›๋Š”๋‹ค.

3. ์‹œ๊ฐ„์„ ์žฌ์„œ ๋ช‡ ์ดˆ๋งŒ์— ๋‹ต์„ ์ ์—ˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๊ณ , ๋งŒ์•ฝ 10์ดˆ๊ฐ€ ๋„˜์—ˆ์œผ๋ฉด ํŒจ๋ฐฐ์ฒ˜๋ฆฌํ•œ๋‹ค.

3-1. ์ดˆ๋ฅผ ์žฌ๋Š” ํ•จ์ˆ˜๋Š” currentTimeMillis() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ /1000์„ ํ•ด์•ผ ์ดˆ ๋‹จ์œ„๋กœ ๋ฐ”๋€๋‹ค.
3-2. ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ธฐ ์ „๊ณผ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•œ ์งํ›„์— currentTimeMillis()๋ฅผ ์‚ฌ์šฉํ•ด ๋‘ ์ฐจ๊ฐ€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด๋‹ค.
3-3. ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ด 10์ดˆ๊ฐ€ ๋„˜์œผ๋ฉด ๋๋ง์ด ์ด์–ด์ ธ๋„ ํŒจ๋ฐฐ์ฒ˜๋ฆฌ ๋˜๋ฏ€๋กœ, ๋๋ง์ด ์ด์–ด์ง€๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์ „์— ์‹œ๊ฐ„์ด 10์ดˆ๊ฐ€ ๋„˜๋Š”์ง€ ํ™•์ธํ•ด์„œ ๋„˜์œผ๋ฉด ๋ฐ”๋กœ while๋ฌธ์„ ํƒˆ์ถœํ•œ๋‹ค.

4. ๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๋ฉด (Player name)>> ์ด ๋– ์„œ ๋‹จ์–ด๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

4-1. Player ์ธ์›์ˆ˜๋งŒํผ ๋ฐฐ์—ด์ด ์ฐจ๋ก€๋กœ ์ž…๋ ฅ๋˜๊ณ , ๋ฐฐ์—ด ๋งˆ์ง€๋ง‰ value๊นŒ์ง€ ์ถœ๋ ฅ๋˜๋ฉด ๋‹ค์‹œ 0๋ฒˆ ์ธ๋ฑ์Šค๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค.
4-2. i๋ฒˆ์งธ ์ธ๋ฑ์Šค value๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐฐ์—ด์ด๋ฆ„[i].name์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
4-3. 10์ดˆ ์ด๋‚ด์ด๊ณ  ๋๋ง์ด ์ด์–ด์ ธ์„œ while๋ฌธ์ด ๋ฐ˜๋ณต๋˜๋ฉด, i++๋กœ ๋‹ค์Œ value๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
4-4. ๋งŒ์•ฝ i๊ฐ€ number-1๊นŒ์ง€ ๋Œ์•˜์œผ๋ฉด, ๋‹ค์‹œ i=0์œผ๋กœ ์„ค์ •ํ•ด์„œ ๋ฐ˜๋ณต๋˜๋„๋ก ํ•œ๋‹ค.

5. ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ˆ„๊ฐ€ ํŒจ๋ฐฐํ–ˆ๋Š”์ง€ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šด๋‹ค.

5-1. ํŒจ๋ฐฐํ•œ Player๋Š” ๋งˆ์ง€๋ง‰์— ์ถœ๋ ฅ๋œ Player ์ด๋ฆ„๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ i๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

์ „์ฒด์ฝ”๋“œ

package com.test.bookexample;

import java.util.Scanner;

class Player {

    public String name;

    public Player (String name) {
        this.name = name;
    }
}

public class WordChain {
    public static void main(String[] args) {

        System.out.println("### ๋๋ง์ž‡๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค! ###");
        System.out.println("๊ทœ์น™: ๋‘์Œ๋ฒ•์น™ ์ ์šฉ ์•ˆ๋จ, 10์ดˆ ์ด๋‚ด๋กœ ๋‹ต์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.\n");

        System.out.print("๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ธ์›์„ ์ •ํ•ด์ฃผ์„ธ์š” >>");
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();

        Player[] player = new Player[number];


        for (int i=0; i<number; i++) {
            
            System.out.print("์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š” >>");
            String name = scanner.next();
            player[i] = new Player(name);
            
        }
        /* ๋ฐฐ์—ด์ด ์ž˜ ๋“ค์–ด๊ฐ”๋Š”์ง€ ํ™•์ธ
        for (Player value : player)
            System.out.println(value.name);
        */

        String firstWord = "๋ผ๋ฉด";
        System.out.println("์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๋Š” <" + firstWord + ">์ž…๋‹ˆ๋‹ค.");

        int i = 0;
        String lastWord = firstWord;

        while (true) {
            long startTime = System.currentTimeMillis() / 1000;
            System.out.print( player[i].name+ ">>");
            String newWord = scanner.next();
            
            long finishTime = System.currentTimeMillis() / 1000;
            double time = finishTime - startTime;

            if (time > 10) {
                System.out.println(time + "์ดˆ(10์ดˆ ์ด์ƒ)๊ฐ€ ์ง€๋‚˜์„œ ์ž๋™์œผ๋กœ ํŒจ๋ฐฐ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
                break;
            }

            String word1 = newWord.substring(0,1);
            String word2 = lastWord.substring(lastWord.length()-1);

            //๋๋‹จ์–ด์™€ ์ฒซ๋‹จ์–ด๊ฐ€ ์ž˜ ์ž…๋ ฅ๋˜๋Š”์ง€ ํ™•์ธ
            //System.out.println(word1 + word2);

            if ( word1.equals(word2)) {
                System.out.println("(" + time + "์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค)");
                lastWord = newWord;
                i++;
                if (i >= number) {
                    i=0;
                }
                continue;
            } else {break;}
        }
        

        System.out.println(player[i].name + "๋‹˜์˜ ํŒจ๋ฐฐ์ž…๋‹ˆ๋‹ค!");


    scanner.close();
 

    }

}

console

### ๋๋ง์ž‡๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค! ###
๊ทœ์น™: ๋‘์Œ๋ฒ•์น™ ์ ์šฉ ์•ˆ๋จ, 10์ดˆ ์ด๋‚ด๋กœ ๋‹ต์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ž„์— ์ฐธ๊ฐ€ํ•˜๋Š” ์ธ์›์„ ์ •ํ•ด์ฃผ์„ธ์š” >>3
์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š” >>์ผ๋ฒˆ๋ง
์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š” >>์ด๋ฒˆ๋ง
์ฐธ๊ฐ€์ž์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š” >>์‚ผ๋ฒˆ๋ง
์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด๋Š” <๋ผ๋ฉด>์ž…๋‹ˆ๋‹ค.
์ผ๋ฒˆ๋ง>>๋ฉด์ˆ˜
(7.0์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค)
์ด๋ฒˆ๋ง>>์ˆ˜๋ฆฌ
(5.0์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค)
์‚ผ๋ฒˆ๋ง>>๋ฆฌ๋ณธ
(3.0์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค)
์ผ๋ฒˆ๋ง>>๋ณธ๋“œ
(4.0์ดˆ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค)
์ด๋ฒˆ๋ง>>๋“œ๋ผ๋งˆ
14.0์ดˆ(10์ดˆ ์ด์ƒ)๊ฐ€ ์ง€๋‚˜์„œ ์ž๋™์œผ๋กœ ํŒจ๋ฐฐ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฒˆ๋ง๋‹˜์˜ ํŒจ๋ฐฐ์ž…๋‹ˆ๋‹ค!

๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ

์ด๋ฏธ ํ–ˆ๋˜ ๋‹จ์–ด๋ฅผ ๋˜ ๋งํ•˜๋ฉด ํŒจ๋ฐฐ๋กœ ํŒ๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ: ์ž…๋ ฅ๋ฐ›์€ ๋‹จ์–ด๋“ค์„ ArrayList์— ๋„ฃ๊ณ , ์ž…๋ ฅ๋ฐ›์€ newWord์™€ lastWord๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์ „์— ArrayList์˜ value๋“ค๊ณผ newWord๊ฐ€ ๊ฐ™์€์ง€ ํŒ๋‹จํ•œ๋‹ค.

728x90

"); wcs_do();