본문 바로가기

프로그래밍 언어/Swift

[Swift] 베이스볼 게임

반응형
1. 랜덤하게 1~9 사이의 숫자 3개를 뽑는다. (중복금지)
2. 사용자로부터 1~9 사이의 숫자 3개를 입력받는다. 
3. 위치와 숫자가 모두 일치하면 S, 숫자는 일치하지만 위치가 다를 경우 B를 출력하도록 한다. 
정답이 [3, 9, 7]이고 사용자가 [3, 7, 5]를 입력했다면 "1S 1B" 을 출력한다.

지난번 포스팅한 Set을 이용하여 문제를 풀어보겠습니다. 

 

1. 정답 숫자를 저장할 공간과, 중복없이 랜덤하게 뽑은 숫자를 저장할 공간을 만듭니다. 

var answer_numbers:[Int] = []
var temp_numbers:Set<Int> = []

 

2. 랜덤하게 1~9 사이의 숫자 3개를 뽑아 temp_numbers에 넣습니다.

숫자의 중복을 제거하고자 .count의 수가 3이 될 때 까지 while문을 반복하도록 하였습니다.  

while temp_numbers.count < 3 {
    var number = Int.random(in: 1...9)
    temp_numbers.insert(number)
}

 

3. temp_numbers에 저장된 값을 answer_numbers에 넣어줍니다. 

answer_numbers = Array<Int>(temp_numbers)

 

4. S와 B를 카운트하기 위한 변수를 선언하고 초기화합니다.

var s_count = 0
var b_count = 0

 

5. 사용자가 입력한 숫자를 저장할 공간을 만듭니다. 

var user_numbers:[Int] = []

 

6. 사용자로부터 숫자 3개를 입력 받습니다. 

for _ in 0...2{
    user_numbers.append(Int(readLine()!)!)
}

 

7. 정답과  입력값이 숫자와 위치가 모두 일치하면 S의 카운트를 올리고, 위치는 다르지만 숫자가 일치하면 B를 카운트합니다.(contains() 사용)

for index in 0...2{
    if user_numbers[index] == answer_numbers[index]{
        s_count += 1
    }else if answer_numbers.contains(user_numbers[index]){
        b_count += 1
    }
}

 

8. S가 3이 되면 while문을 빠져나오고 "정답입니다"를 출력합니다. 

print ("\(s_count)S \(b_count)B")
if s_count == 3{
    print("정답입니다.")
    break
}

 

 

전체코드는 다음과 같습니다. 

import Foundation

var answer_numbers:[Int] = []
var temp_numbers:Set<Int> = []

while temp_numbers.count < 3 {
    var number = Int.random(in: 1...9)
    temp_numbers.insert(number)
}
answer_numbers = Array<Int>(temp_numbers)

while true{
    var s_count = 0
    var b_count = 0
    var user_numbers:[Int] = []
    for _ in 0...2{
        user_numbers.append(Int(readLine()!)!)
    }
    for index in 0...2{
        if user_numbers[index] == answer_numbers[index]{
            s_count += 1
        }else if answer_numbers.contains(user_numbers[index]){
            b_count += 1
        }
    }
    print ("\(s_count)S \(b_count)B")
    if s_count == 3{
        print("정답입니다.")
        break
    }
}

 

입력과 출력




1S 1B 



1S 0B 



3S 0B 
정답입니다.

 

반응형