๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“๐Ÿ’ช/Python

์ˆซ์ž ์•ผ๊ตฌ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ

by ์ˆ˜์จ”์•™ 2022. 9. 11.

์ˆซ์ž ์•ผ๊ตฌ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด๋ณด์ž!

๋”๋ณด๊ธฐ

์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ

์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”

์š”๊ตฌ์กฐ๊ฑด

  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋ฉด ์Šท์ž์•ผ๊ตฌ ๊ฒŒ์ž„์„ ๋ช‡ ์ž๋ฆฌ ์ˆซ์ž๋กœ ํ•  ๊ฑด์ง€ ์ž…๋ ฅ ๋ฐ›์•„ ์ฃผ์„ธ์š”
    • 3์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„์€ 3์ž๋ฆฟ์ˆ˜๋กœ ์ง„ํ–‰, ์ตœ๋Œ€ 10์ž๋ฆฌ
  • ์ฒซ ๋ฒˆ์งธ ์ž…๋ ฅ์„ ๋ฐ›์€ ์ž๋ฆฟ์ˆ˜ ๋งŒํผ ํ›„ ํŒŒ์ด์ฌ์œผ๋กœ ์ค‘๋ณต ์—†๋Š” ๋žœ๋คํ•œ ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์„ธ์š”
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ํ–ˆ์„ ๋•Œ ์ˆซ์ž์•ผ๊ตฌ ๊ฒŒ์ž„์˜ ๊ทœ์น™์— ๋งž๊ฒŒ ball / out count๋ฅผ ์ถœ๋ ฅํ•ด ์ฃผ์„ธ์š”
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋‹ต์„ ๋งž์ถ˜ ๊ฒฝ์šฐ ์•„๋ž˜ ํ•ญ๋ชฉ๋“ค์„ ์ถœ๋ ฅํ•ด ์ฃผ์„ธ์š”
    • ์‚ฌ์šฉ์ž๊ฐ€ ์ •๋‹ต์„ ๋งž์ถ”๊ธฐ๊นŒ์ง€ ์ž…๋ ฅ ํ•œ ํšŸ์ˆ˜
    • ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ด์„œ ์ •๋‹ต์„ ๋งž์ถ”๊ธฐ๊นŒ์ง€ ์†Œ์š”๋œ ์‹œ๊ฐ„
    • ์ •๋‹ต์„ ๋งž์ถ˜ ์‹œ์ ์˜ ๋‚ ์งœ/์‹œ๊ฐ„
  • ๊ฒŒ์ž„์„ ์ง„ํ–‰ํ•˜๋˜ ๋„์ค‘, “exit”์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•ด ์ฃผ์„ธ์š”

๊ณผ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ๋„์›€๋‹ซ๊ธฐ

  • 1. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ n๊ฐœ์˜ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๋žœ๋คํ•œ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    2. ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ ๋œ ์‹œ๊ฐ„์„ ๊ธฐ๋กํ•œ๋‹ค.
    3. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ์ž…๋ ฅ์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค try count๋ฅผ 1์”ฉ ๋”ํ•ด์ค€๋‹ค.
    4. ์‚ฌ์šฉ์ž ์ž…๋ ฅ x์™€ ๋žœ๋คํ•˜๊ฒŒ ์ƒ์„ฑ ๋œ y ๋‘ ์ˆซ์ž๋ฅผ ๋น„๊ตํ•œ๋‹ค.
     4-a. x์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ y์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      * ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด out count + 1
     4-b. x์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ y์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด x์˜ ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž์™€ y์˜ ์ฒซ ๋ฒˆ์จฐ ์ˆซ์ž๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      * ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ strike count + 1
      * ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ball count + 1
     4-c. 4-a ~ 4-b๋ฅผ x์˜ ๋ชจ๋“  ์ž๋ฆฟ์ˆ˜๋ฅผ ๋Œ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
    5. ์‚ฌ์šฉ์ž๊ฐ€ exit์„ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ ์ •๋‹ต์„ ๋งž์ถœ ๋•Œ๊นŒ์ง€ 3~4์˜ ๋™์ž‘์„ ๋ฌดํ•œํ•˜๊ฒŒ ๋ฐ˜๋ณตํ•œ๋‹ค.
    6. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด 1๋ฒˆ์—์„œ ์ƒ์„ฑํ•œ ์ˆซ์ž์™€ ์ผ์น˜ ํ•  ๊ฒฝ์šฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค.
     6-a. try count๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
     6-b. ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ ๋œ ์‹œ๊ฐ„๊ณผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘ ๋œ ์‹œ๊ฐ„์˜ ์ฐจ๋ฅผ ๊ณ„์‚ฐํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.
     6-c. ๊ฒŒ์ž„์ด ์ข…๋ฃŒ ๋œ ์‹œ์ ์˜ ๋‚ ์งœ์™€ ์‹œ๊ฐ์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ๋Š” ์ €๋Ÿฌํ•˜๋‹ค

 

์ฒ˜์Œ์— ์‹œ์ž‘์ด ๋„ˆ๋ฌด ๋ง‰์—ฐํ–ˆ๋‹ค.

์ผ๋‹จ random ์ˆ˜๋ฅผ ๋ฐ›์•„์™€์•ผํ•˜๋‹ˆ๊นŒ import ํ•ด์ฃผ๊ณ 

์‹œ๊ฐ„์„ ์žฌ์•ผํ•˜๋‹ˆ๊นŒ datetime, timedelta๋„ ๋ฐ›์•„์™€์ฃผ๊ณ  

๋žœ๋ค ์ˆซ์ž์™€ ์ž…๋ ฅ๊ฐ’์ด ์ค‘๋ณต์ด๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ set์œผ๋กœ ์ฃผ๊ณ 

๋ณ€์ˆ˜์„ ์–ธ ํ•ด์ฃผ๊ณ  ์‹œ์ž‘...!!!

 

import random
from datetime import datetime, timedelta
random_numbers = set()
user_numbers = set()
try_count = 0
o = 0
b = 0
s = 0

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’ ๋งŒํผ ์ค‘๋ณต ์—†๋Š” ๋žœ๋ค ์ˆซ์ž ์ƒ์„ฑ
def get_random_number(start):
    result = []
    if start > 10:
        print("10๋ณด๋‹ค ์ž‘์€ ์ˆ˜ ์ž…๋ ฅํ•ด์ฃผ์ˆ‘")
    elif start == 0:
        print("0์€ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค!!!")
    else:
        random_number = set()
        while len(random_number) < start:
            random_number.add(random.randrange(1, 10))
        return random_number

num = int(input())
random_numbers = list(get_random_number(num))
start_time = datetime.now()

user_numbers = list(set(map(int, input().split())))

if user_numbers != random_numbers:
    try_count += 1
    for i in range(len(random_numbers)):
        if user_numbers[i] not in random_numbers:
            o += 1
        else:
            if user_numbers[i] == random_numbers[i]:
                s += 1
            else:
                b += 1

print(random_numbers)
print(user_numbers)
print(f'ball : {b}, out : {o}, strike : {s}')

์ผ๋‹จ ์—ฌ๊ธฐ๊นŒ์ง€ ํ•ด๋ดค๋‹ค!

 

๋žœ๋ค์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ ,

user_numbers๋กœ input๊ฐ’ ๋ฐ›์•„์™€์„œ ํ™•์ธํ• ๊ฒธ

ramdom_numbers์™€ user_numbers, ball, out, strike ๊นŒ์ง€ ์ฐ์–ด์ฃผ๋„๋ก!

 

์ž ํ•œ๋ฒˆ ์ž…๋ ฅํ•œ๊ฑฐ๋กœ ์ž˜ ๋‚˜์˜ค๊ฒŒ๋Š” ํ–ˆ์œผ๋‹ˆ ์ด์ œ ์ด๊ฑธ ์ •๋‹ต ๋งž์ถœ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด๋ณด์ž..!!!!

 

import random
from datetime import datetime
import time
random_numbers = set()
user_numbers = set()
try_count = 0
o = 0
b = 0
s = 0

# ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’ ๋งŒํผ ์ค‘๋ณต ์—†๋Š” ๋žœ๋ค ์ˆซ์ž ์ƒ์„ฑ
def get_random_number(start):
    if start > 10:
        print("10๋ณด๋‹ค ์ž‘์€ ์ˆ˜ ์ž…๋ ฅํ•ด์ฃผ์ˆ‘")
    elif start == 0:
        print("0์€ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค!!!")
    else:
        random_number = set()
        while len(random_number) < start:
            random_number.add(random.randrange(1, 10))
        return random_number


num = int(input())
random_numbers = list(get_random_number(num))
start_time = time.time()
user_numbers = list(set(map(int, input().split())))
print(random_numbers)
while True:
    if user_numbers != random_numbers:
        try_count += 1
        for i in range(len(random_numbers)):
            if user_numbers[i] not in random_numbers:
                o += 1
            elif user_numbers[i] in random_numbers:
                if user_numbers[i] == random_numbers[i]:
                    s += 1
                elif user_numbers[i] in random_numbers:
                    b += 1
        print(f'{o}O, {b}B, {s}S')
        o = 0
        s = 0
        b = 0
        user_numbers = list(set(map(int, input().split())))
    else:
        print('์ •๋‹ต์ž…๋‹ˆ๋‹ค!')
        end_time = time.time()
        print(end_time-start_time)
        break

์œผ์•„ใ…์•„์•„์•„์•„ ์•„ใ…ใ…์•„์•„ ๋‚ด์ผ ๋‹ค์‹œํ•ด๋ณด๋„๋กํ•˜์ž

 

 

-----

 

์˜ค๋Š˜ ํ•ด์„ค๊ฐ•์˜๋ฅผ ๋“ค์—ˆ๋‹ค!

import random
import time
from datetime import datetime

# CASE 1
"""
number_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
random.shuffle(number_list)

random_numbers = number_list[0:length] # 0:5

print(random_numbers)
"""
# CASE 2
"""
number_list = [x for x in range(10)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

random_numbers = []

for _ in range(length):
    random_numbers.append(number_list.pop(random.randrange(0, len(number_list))))

print(random_numbers)
"""


# CASE 3
def main():
    length = int(input("์ž๋ฆฟ์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” : "))
    random_numbers = set()

    while len(random_numbers) < length:
        random_numbers.add(random.randint(0, 9))

    random_numbers = list(random_numbers)
    random.shuffle(random_numbers)

    start_time = time.time()
    try_count = 0

    while True:
        input_number = input("๊ฐ’์„ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š” (์ข…๋ฃŒ - exit): ")
        if input_number == "exit":
            return

        try_count += 1
        out_count = 0

        ball_count = 0
        strike_count = 0

        for i, v in enumerate(input_number):
            v = int(v)
            if v not in random_numbers:  # ํฌํ•จ๋ผ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ
                out_count += 1

            else:  # ํฌํ•จ๋ผ ์žˆ๋Š” ๊ฒฝ์šฐ
                if random_numbers[i] == v:
                    strike_count += 1
                else:
                    ball_count += 1

        if strike_count == length:
            print("########################")
            print("์ •๋‹ต์ž…๋‹ˆ๋‹ค!!")
            print(f"์†Œ์š” ์‹œ๊ฐ„ : {time.time() - start_time:.2f}")
            print(f"ํด๋ฆฌ์–ด ์ผ์ž : {datetime.now()}")
            print(f"๋„์ „ ํšŸ์ˆ˜ : {try_count}")
            print("########################")
            return

        print(f"{ball_count}๋ณผ {strike_count}์ŠคํŠธ๋ผ์ดํฌ {out_count}์•„์›ƒ")


main()

ํ•œ๋ฒˆ ์ดํ•ด๋ฅผ ํ•ด๊ณ  ๋‹ค์‹œ ํ•ด๋ดค์œผ๋‹ˆ

์ฃผ๋ง์— ํ•œ๋ฒˆ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ๋‹ค!

 

728x90

๋Œ“๊ธ€