문제 설명 : 12321 , 23432 , 1818181 처럼 좌우대칭인 숫자를 찾아서 맞으면 yes , 아니면 no를 출력해야한다.
0이 입력되면 프로그램은 종료된다.
내 코드 :
whileTrue:
str=input()
str_li= []
ifstr=='0':
break
else:
foriinstr:
str_li.append(i)
reversed_str_li=list(reversed(str_li))
ifstr_li==reversed_str_li:
print('yes')
else:
print('no')
코드 설명 : str이라는 변수에 입력값이 저장된다.(input()이기 때문에 자료형은 문자열임)
while True로 반복문을 걸어놓고 str == '0'일 때 종료되게 해놨다.
입력값이 0이 아닐경우 for문으로 str_li(리스트 자료형)에 str을 한 글자 한 글자 분리해서 넣어줬다.
(입력값이 12321이였다면 str에는 '12321'이 들어감, 이걸 for문을 사용해서 str_li에 ['1','2','3','2','1']이 들어가게 한거임)
그리고 reversed_str_li = list(reversed(str_li)) 이 코드를 통해 str_li를 좌우대칭 시킨 리스트를 만듦.
마지막에 조건문으로 str_li 와 reversed_str_li가 같으면 yes 다르면 no가 출력되게 함.
내 코드 :
n=int(input())
sentence=tuple(map(str, input()))
alphabet= (
("0", "0", "0", "0", "0", "0"),
("0", "0", "1", "1", "1", "1"),
("0", "1", "0", "0", "1", "1"),
("0", "1", "1", "1", "0", "0"),
("1", "0", "0", "1", "1", "0"),
("1", "0", "1", "0", "0", "1"),
("1", "1", "0", "1", "0", "1"),
("1", "1", "1", "0", "1", "0"),
)
alphadict= {
alphabet[0]: "A",
alphabet[1]: "B",
alphabet[2]: "C",
alphabet[3]: "D",
alphabet[4]: "E",
alphabet[5]: "F",
alphabet[6]: "G",
alphabet[7]: "H",
}
wrong=0
foriiinrange(8):
cnt=0
foriiiinrange(ii, ii+6):
tt=0
foriinrange(n):
ifalphabet[ii][iii] == (sentence[iii]):
wrong+=1
cnt+=1
tt=1
ifcnt>=5:
print(alphadict[alphabet[ii]])
iftt==0:
print(wrong)
print(cnt)
처음에 입력되는 숫자를 n 에 저장한다. 그 후 0100101 이런식으로 입력되는 숫자들을 하나하나 문자로 바꿔서
튜플안에 넣고 sentence안에 저장한다. alphabet과 alphadict을 활용해 ("0", "0", "0", "0", "0", "0")를 "A"에 매치시키는 식으로 진행했다. 밑에 반복문은 문자가 8가지이고 각 문자는 6개의 숫자로 구성돼있고 문자의 개수는 n개 이므로 저렇게 구성해놨다.
이 문제는 실버4지만 상원님의 알고리즘 스터디에서 큐,데큐,스택을 배운 나에게는 가소로운 문제였따.