예) 영수가 324를 갖고 있으면
현재 민혁이와 영수는 게임을 하고 있는 도중에 있다. 민혁이가 영수에게 어떤 수들을 물어보았는지, 그리고 각각의 물음에 영수가 어떤 대답을 했는지가 입력으로 주어진다. 이 입력을 바탕으로 여러분은 영수가 생각하고 있을 가능성이 있는 수가 총 몇 개인지를 알아맞혀야 한다.
아래와 같은 경우를 생각해보자.
이때 가능한 답은 324와 328, 이렇게 두 가지이다.
영수는 동아리의 규율을 잘 따르는 착한 아이라 민혁이의 물음에 곧이곧대로 정직하게 답한다. 그러므로 영수의 답들에는 모순이 없다.
민혁이의 물음들과 각각의 물음에 대한 영수의 답이 입력으로 주어질 때 영수가 생각하고 있을 가능성이 있는 답의 총 개수를 출력하는 프로그램을 작성하시오.
# 입력
4
123 1 1
356 1 0
327 2 0
489 0 1
# 출력
2
- 1000개를 만들어서 안되는걸 빼면 어떨까?
- 123부터 999까지 0이 안들어가는 수 를 만든다.
- 자리수를 비교하게 만들어서 스트라이크 갯수와 볼 갯수가 다르면 remove한다.
- 자리수 비교를 위해 문자열로 만든다.
- 남은 후보를 return 한다.
import copy
def baseball(question):
total=[]
compare=[]
for i in range(123,1000): # 123부터 999까지 반복문
# 자리수 반복 안되게, 0 안들어가게 만든다.
if str(i)[0]==str(i)[1] or str(i)[0]==str(i)[2] or str(i)[2]==str(i)[1] or str(i)[0]=='0' or str(i)[1]=='0' or str(i)[2]=='0' :
continue
else:
total.append(str(i))
# copy로 다른 메모리공간에 넣음.
compare=copy.deepcopy(total)
for i in range(question): #질문 갯수만큼
num,strike,ball=map(int,input().split())
first_num=str(num)[0] # 첫째자리
second_num=str(num)[1]# 둘째자리
last_num=str(num)[2]# 셋째자리
for j in compare: # 비교.
s=0 #스트라익 갯수
b=0# 볼개수
# 스트라이크 개수 추가
if j[0]==first_num:
s+=1
if j[1]==second_num:
s+=1
if j[2]==last_num:
s+=1
# 볼개수 추가
if j[0]==second_num or j[0]==last_num:
b+=1
if j[1]==first_num or j[1]==last_num:
b+=1
if j[2]==second_num or j[2]==first_num:
b+=1
# 스트라이크나 볼개수가 다르면 지우기
if s!=strike or b!=ball:
if j not in total: # 만약 이미 지운거면 다음수로
continue
total.remove(j)
return len(total)# 갯수 return
def main():
question=int(input())
answer=baseball(question)
print(answer)
if __name__=="__main__":
main()