본문 바로가기

엑셀 & VBA

1-4. 숫자야구 - 중복된 확인 (if)

 숫자 야구 게임에서 232와 같이 2가 두번 나오는 숫자는 제외 되어야 합니다. 사용하면 안된다는 룰이 따로 있는지는 잘 모르겠지만, 중복이 되는 경우는 제외하는 것이 게임을 더 깔끔하게 만들어주니, 이 경우는 제외하는 방향으로 게임을 만들어 보겠습니다.

 

 이 방법에 대해서는 분명 더 좋은 방법이 있을 것 같긴 하지만, 그래도 제가 한 방법을 소개해 드리겠습니다. 그냥 참고만 하시면 됩니다.

 

 원리는 이렇게 됩니다. 123이라는 숫자가 있다면, [1,2], [1,3] ,[2,3] 이런식으로 두개씩 비교를 합니다. 비교를 해서 숫자가 중복이 된다면 1점, 중복이 되지 않는다면 0점을 줍니다. 세 번의 비교에서 얻은 점수가 0점이라면 중복이 되지 않는 것이고, 세번의 비교에서 얻은 점수가 1점 이상이라면 중복이 되는 숫자가 있는 것이므로 난수를 다시 생성해야 합니다.

 

 예를 들어 123의 경우 [1,2] : 0점, [1,3] : 0점, [2,3] : 0점 이므로 총 점수의 합은 0입니다. 중복이 되는 수가 없습니다. 212의 경우 [2,1] : 0점, [1,2] : 0점, [2,2] : 1점 이므로 총 점수의 합은 1이고, 중복이 되는 수가 있습니다. 333의 경우 [3,3] : 1점, [3,3] : 1점, [3,3] : 1점 이므로 총 점수의 합은 3으로 중복이 되는 수가 있습니다.

 

if 함수

 if 함수는 사진에서도 확인할 수 있듯이 if(조건, 참일때, 거짓일때) 이런식으로 구성이 되어 있습니다. 조건에는 우리가 원하는 조건을 넣으면 됩니다. 우리는 숫자 두개가 같을때 1점, 다를 때 0점이므로 '숫자 두개가 같을때'가 조건이 됩니다. 참일때는 1점이고, 거짓일때는 0점입니다. 이는 if(A1=A2,1,0)이런식으로 적으면 됩니다. A1과 A2가 같은 숫자라면 해당 셀은 1이 되고, 아니라면 0이 됩니다.

 

 1-3에서 각각의 자리 숫자를 분리했기 때문에, 그렇게 숫자를 분리한것을 기반으로 if함수를 이용해 점수를 구해보겠습니다. 지난 글에서 C1, D1, E1에 1의 자리 10의 자리 100의 자리수를 뽑아냈기 때문에, 그 자리에 분리가 된 수가 있다고 가정을 해보겠습니다. 난수가 생성한 3자리 자연수가 123이라고 하면 C1에서 E1까지 3,2,1 라는 숫자가 들어 있을 것입니다. C2에는 3,2를 비교한 점수, D2에는 2,1을 비교한 점수, E2에는 3,1을 비교한 점수를 넣어보겠습니다. 그럼 C2에는 =if(C1=D1,1,0) 이라는 함수를 적어주면 됩니다. D2는 if(D1=E1,1,0), E2는 if(C1=E1,1,0)이라는 함수를 적어주면 됩니다.

 

 점수의 합을 구하기 위해서는 SUM이라는 함수를 사용합니다. F2셀에 C2부터 E2까지의 숫자의 합을 적는다고 한다면, F2에는 SUM(C2:E2)이렇게 적으면 됩니다.

 

123
212
333

 이제 F2의 숫자가 0인지 아닌지만 확인하면 숫자가 중복이 되었는지 아닌지를 알 수 있게 되었습니다.