๊ฐœ๋ฐœ/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค

๋ธ”๋ž™์žญ ๋ฏธ์…˜ ํšŒ๊ณ 

์œจ๋ฌด; 2025. 3. 21. 14:29

๋ธ”๋ž™์žญ ๋ฏธ์…˜์—์„œ ์–ด๋ ค์› ๋˜ ๋ถ€๋ถ„์„ ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์ถ”๋ ค๋ณด์ž๋ฉด Ace ์นด๋“œ์˜ ๊ตฌํ˜„, ์ž…๋ ฅ๊ณผ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„, ๊ฐ์ฒด์˜ ์—ญํ•  ๋ถ„๋ฆฌ์ด๋‹ค.


- ์ž…๋ ฅ๊นŒ์ง€ ๊ฐ์ฒด์˜ ์—ญํ• ์ธ๊ฐ€?

์ด๋ฒˆ ๋ฏธ์…˜์—์„œ ๊ฐ€์žฅ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•œ๊ฑด ์ž…๋ ฅ๊ณผ ๊ฐ์ฒด๊ฐ„์˜ ๊ด€๊ณ„์—์„œ ์–ด๋””๊นŒ์ง€๋ฅผ ๊ฐ์ฒด์˜ ์—ญํ• ๋กœ ๋ณด๋А๋ƒ์ด๋‹ค. ๋ธ”๋ž™์žญ ๋ฏธ์…˜์€ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๊ณ„์†ํ•ด์„œ ์นด๋“œ๋ฅผ ๋ฐ›์„๊ฑด์ง€ ๋ฌผ์–ด๋ณด๊ณ , ์นด๋“œ๋ฅผ ๋ฐ›๋Š”๋‹ค๊ณ  ๊ฒฐ์ •ํ•˜๋ฉด ํ•ด๋‹น ์นด๋“œ๋ฅผ ์ฃผ๊ณ , ์ ์ˆ˜๊ฐ€ Bust ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๊ฐ€์ง„ ์นด๋“œ๋“ค์„ ์ถœ๋ ฅํ•˜๋ฉด์„œ ๋‹ค์‹œ ์นด๋“œ๋ฅผ ๋ฐ›์„๊ฑด์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋กœ์ง์ด ๋ฐ˜๋ณต๋œ๋‹ค.

์ด๋Ÿฐ ํ๋ฆ„์„ ์ข€ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ณ„์†ํ•ด์„œ ํ”Œ๋ ˆ์ด์–ด์˜ ์ ์ˆ˜๋ฅผ ํ™•์ธํ•˜์—ฌ Bust ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ์นด๋“œ๋ฅผ ๋ฐ›์„๊ฑด์ง€ ๋ฌผ์–ด๋ณด๊ณ , ๋‹ต๋ณ€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ Yes๋ฉด ์นด๋“œ๋ฅผ ์ฃผ๊ณ , No๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ๋‹ค. ์ฆ‰, ํ”Œ๋ ˆ์ด์–ด์˜ ์ž…๋ ฅ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์นด๋“œ๋ฅผ ๋” ์ฃผ๊ณ  ๋ฐ›๋Š” ๋กœ์ง์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ! ์ถ”๊ฐ€๋กœ ์ถœ๋ ฅ๊นŒ์ง€ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ Input๊ณผ ๊ฐ์ฒด์˜ ๋กœ์ง, Output์˜ ๋ถ„๋ฆฌ๊ฐ€ ์ƒ๋‹นํžˆ ์–ด๋ ค์› ๋‹ค.

for (Player player : players.getPlayers()) {  
    while (!player.isFinished()) {  
        if (!InputView.readDrawOneMore(player.getNickname())) {  
            player.stand();  
            break;  
        }        
        player.hit(deck.draw());  
        OutputView.printPlayerCards(player);  
    }
}


์ตœ์ข…์ ์œผ๋กœ ๋‚˜๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ, ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์•ˆ๋„ ์žˆ์—ˆ๋‹ค.

public class BlackjackGame {

	...

	public void playerTurn() {
		players.processAllPlayerTurn(
			InputView::readDrawOneMore,
			OutputView::printPlayerCards
		);

		...
	}

	...
}

public class Players {

	...

	public void processAllPlayerTurn(
		Deck deck,
		Function<String, boolean> readDrawOneMore,
		Consumer<Player> printPlayerCards
	) {
		for (Player player : players) {
			player.processTurn(deck, readDrawOneMore, printPlayerCards);
		}
	}
}

public class Player {

	public void processTurn(
		Deck deck,
		Function<String, boolean> readDrawOneMore,
		Consumer<Player> printPlayerCards
	) {
		while (!isFinished()) {
			if (!readDrawOneMore(nickname)) {  
				stand();
				break;
			}        
			hit(deck.draw());  
			printPlayerCards(player); 
		}
	}
}


ํ•ด๋‹น ๋ฐฉ์‹์€ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์ ธ ๋ณด๊ธฐ ์ข‹์•„์ง„๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ๋ณธ์ธ์—๊ฒŒ ๋ฌป๊ณ  ์นด๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ”Œ๋ ˆ์ด์–ด ์ž์ฒด์˜ ์ฑ…์ž„์œผ๋กœ ์ •ํ•ด์ง„๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋‹ค๋งŒ ๋‚ด ์ƒ๊ฐ์— ์ด ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋Š” ์ ์ด๋‹ค. ํ˜ธ์ถœ ์‹œ์ ๊ณผ ์‚ฌ์šฉ ์‹œ์ ์˜ ์ฐจ์ด๋Š” ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ฃผ์–ด ๋ฌธ์ œ๋˜์ง€ ์•Š๋Š”๋‹คํ•ด๋„ ์–ด๋–ค ํ•จ์ˆ˜๋“  ํ˜•์‹๋งŒ ๋งž์œผ๋ฉด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ œ์ผ ํฐ ๋‹จ์ ๊ฐ™๋‹ค.

์˜ˆ์‹œ๋กœ `readDrawOneMore`์ด๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ, ํŒŒ๋ผ๋ฏธํ„ฐ ์ด๋ฆ„์„ ์ž˜๋ชป ์ดํ•ดํ•ด์„œ ํ•œ ์žฅ ๋” ๋ฐ›์„ ๊ฒƒ์ธ์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐ›์•˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ฌผ์–ด๋ณด๋Š” ํ˜•์‹์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณด๋ƒˆ๋‹ค๋ฉด.. y, n์˜ ์˜๋ฏธ๊ฐ€ ์ •๋ฐ˜๋Œ€๊ฐ€ ๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง„ ์•Š์•˜๊ณ , ์™ธ๋ถ€์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•ด์„œ ํ๋ฆ„์„ ์ข€ ๋” ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.


ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

์žฅ์ 
- ๊ฐ์ฒด์— ๋ณธ์ธ์˜ ์ฑ…์ž„์„ ๋ชจ๋‘ ๋„˜๊ฒจ ์‘์ง‘๋„๊ฐ€ ๋†’์•„์ง
- ๊ฐ์ฒด์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ

๋‹จ์ 
- ํ•จ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋Š” ํ–‰์œ„์˜ ์œ„ํ—˜์„ฑ
- ์ฑ…์ž„์˜ ์†Œ์žฌ๊ฐ€ ๋ถˆ๋ถ„๋ช…ํ•ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ



- ์ƒํƒœ ํŒจํ„ด์€ ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋‹ค.

์ด๋ฒˆ์— ๋ธ”๋ž™์žญ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ƒํƒœ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ–ˆ๋‹ค. ๋ธ”๋ž™์žญ ๊ฒŒ์ž„์—์„œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ƒ๊ฐ์€ ๋ชปํ•ด๋ดค๊ธฐ๋„ ํ•˜๊ณ  ์‹ ๊ธฐํ•œ ๋ฐฉ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•ด์„œ ๊ณง์žฅ ๋‚ด ๋ฏธ์…˜์— ์ ์šฉํ–ˆ์—ˆ๋‹ค.

๊ทผ๋ฐ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ๊ณ ๋ฏผํ•˜์ง€ ์•Š๊ณ  ๋„์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ผ๊นŒ. ์ƒํƒœ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๊ธด ํ–ˆ์œผ๋‚˜ ์–ด๋””๊นŒ์ง€ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๋” ๊ฐœ์„ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€ ๋ฒฝ์ด ์ƒ๊ธด ๊ฒƒ์ฒ˜๋Ÿผ ๋ง‰ํ˜€๋ฒ„๋ ธ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒํƒœ ๊ฐ์ฒด๊ฐ€ ๋ธ”๋ž™์žญ์—์„œ ๊ฐ€์ ธ์•ผํ•  ์ฑ…์ž„์„ ์ข€ ๊ณ ๋ฏผํ•ด๋ดค๊ณ  ๋‚˜๋ฆ„์˜ ๊ฒฐ๋ก ์„ ๋‚ด๋ ธ๋‹ค.

 

์ƒํƒœ ๊ฐ์ฒด๋Š” ํ”Œ๋ ˆ์ด์–ด ๋ณธ์ธ์ด ๋ณธ์ธ์˜ ํ–‰๋™์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด์ด์ง€ ์™ธ๋ถ€์™€ ์†Œํ†ต์„ ์œ„ํ•œ ๊ฐ์ฒด๋Š” ์•„๋‹ˆ๋‹ค.


ํ•ด๋‹น ๊ฒฐ๋ก ์ด ๋‚˜์˜จ ์ด์œ ๋Š” ์™ธ๋ถ€์—์„œ ๊ฒŒ์ž„์˜ ์ŠนํŒจ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์ƒํƒœ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์˜คํžˆ๋ ค ๋ณต์žกํ•ด์ง€๊ณ  ์–ด๋ ค์› ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ ์ƒํƒœ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํŒ๋‹จํ•˜๋Š” isBust, isBlackjack ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๋Š”๋ฐ ์ €๋ ‡๊ฒŒ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๊ณ  ๋‚˜๋‹ˆ ์˜คํžˆ๋ ค ์ ๋‹นํžˆ ์—ญํ• ์„ ๋‚˜๋ˆˆ ๊ฒƒ ๊ฐ™์•„์„œ ์ข‹์•˜๋‹ค.



- Ace ์นด๋“œ ๊ณ„์‚ฐ

Ace ์นด๋“œ๋Š” ๋ธ”๋ž™์žญ์—์„œ ํŠน๋ณ„ํ•˜๋‹ค. 1 ๋˜๋Š” 11์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ณ , ์ด ๊ฐ’์€ ์ตœ์ข… ์ ์ˆ˜์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, 21์ด ๋„˜์ง€ ์•Š์€ ์„ ์—์„œ ๊ฐ€์žฅ 21๊ณผ ๊ฐ€๊นŒ์šด ์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ์นด๋“œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ธ”๋ž™์žญ ๊ฒŒ์ž„ ๋ฃฐ์— ์˜ํ•œ ์ฑ…์ž„์ผ๊นŒ, Ace ์นด๋“œ ์ž์ฒด์˜ ์ฑ…์ž„์ผ๊นŒ? ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.

1. ๋ธ”๋ž™์žญ ๊ฒŒ์ž„ ๋ฃฐ์˜ ์ฑ…์ž„
Ace ์นด๋“œ๊ฐ€ ํŠน๋ณ„ํ•˜์ง€๋งŒ, ์ด๋Š” ๋ธ”๋ž™์žญ ๊ฒŒ์ž„์—์„œ๋งŒ ์œ ํšจํ•˜๋‹ค๋Š” ์ƒ๊ฐ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ์ฑ…์ž„์ด๋‹ค. ์ด๋Ÿฌ๋ฉด Ace ์นด๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์— ์ ์ˆ˜์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์„ ํ”Œ๋ ˆ์ด์–ด์˜ ํŒจ `hands`, `Cards`, `Player`์™€ ๊ฐ™์€ ๊ฐ์ฒด๊ฐ€ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.

์žฅ์ ์œผ๋กœ๋Š” ๋ณดํ†ต ์‚ฌ๋žŒ๋“ค์ด ๋ธ”๋ž™์žญ ๊ฒŒ์ž„์„ ์ƒ๊ฐํ•  ๋•Œ ์ž์‹ ์˜ ํŒจ ํ˜น์€ ์ž์‹ ์ด ๊ณ„์‚ฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ ์ƒ๊ฐ์˜ ํ๋ฆ„์„ ์ซ“์•„๊ฐ€๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

2. Ace ์นด๋“œ ์ž์ฒด์˜ ์ฑ…์ž„
Ace ์นด๋“œ๊ฐ€ ์ง์ ‘ ๋ณธ์ธ์˜ ์ ์ˆ˜๋ฅผ ํ†ตํ•ด ์ ์ˆ˜ ๊ณ„์‚ฐ์„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ์ฒด์˜ ์—ญํ• ์„ ๋๊นŒ์ง€ ํ˜น์€ ๊ทน๋‹จ์ ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค๋ฉด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ์„ค๊ณ„์ด๋‹ค. ๋‹ค๋งŒ, ๋ธ”๋ž™์žญ์—์„œ๋งŒ Ace ์นด๋“œ 1, 11 ๋‘ ์ ์ˆ˜๋ฅผ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ๋‚˜๋ˆŒ ํ•„์š”๊ฐ€ ์žˆ๋‚˜? ํ•˜๋Š” ์ƒ๊ฐ๋„ ์žˆ๋‹ค. ์˜คํžˆ๋ ค ํด๋ž˜์Šค๊ฐ€ ๋‚˜๋ˆ ์ง€๋ฉด์„œ ์ ์  ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.