본문 바로가기

WINK-(Web & App)/개인 스터디 & 프로젝트

알고리즘 2인 스터디 #5주차 - 이총명

반응형

문제 설명 : 12321 , 23432 , 1818181 처럼 좌우대칭인 숫자를 찾아서 맞으면 yes , 아니면 no를 출력해야한다.

0이 입력되면 프로그램은 종료된다.

 

내 코드 :

while True:
    str = input()
    str_li = []

    if str == '0':
        break
    else:
        for i in str:
            str_li.append(i)
        reversed_str_li = list(reversed(str_li))

        if str_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


for ii in range(8):
    cnt = 0
    for iii in range(ii, ii + 6):
        tt = 0
        for i in range(n):
            if alphabet[ii][iii] == (sentence[iii]):
                wrong += 1
                cnt += 1
                tt = 1
            if cnt >= 5:
                print(alphadict[alphabet[ii]])
if tt == 0:
    print(wrong)
print(cnt)

처음에 입력되는 숫자를 n 에 저장한다. 그 후 0100101 이런식으로 입력되는 숫자들을 하나하나 문자로 바꿔서

튜플안에 넣고 sentence안에 저장한다. alphabet과 alphadict을 활용해 ("0", "0", "0", "0", "0", "0")를 "A"에 매치시키는 식으로 진행했다. 밑에 반복문은 문자가 8가지이고 각 문자는 6개의 숫자로 구성돼있고 문자의 개수는 n개 이므로 저렇게 구성해놨다.

 

이 문제는 실버4지만 상원님의 알고리즘 스터디에서 큐,데큐,스택을 배운 나에게는 가소로운 문제였따.

 

내 코드:

import sys
from collections import deque

dq = deque()

n = int(sys.stdin.readline())
command = []
for i in range(n):
    command.append(list(map(str, sys.stdin.readline().split())))
    if command[i][0] == "push":
        dq.append(int(command[i][1]))

    elif command[i][0] == "pop":
        if len(dq) != 0:
            print(dq.pop())
        else:
            print(-1)
    elif command[i][0] == "size":
        print(len(dq))
    elif command[i][0] == "empty":
        if len(dq) == 0:
            print(1)
        else:
            print(0)
    elif command[i][0] == "top":
        if len(dq) == 0:
            print(-1)
        else:
            print(dq[-1])

코드 설명 : 이 문제에서 살짝 어려웠던게

push 1

이런식으로 한 줄에 문자열과 숫자가 둘 다 있다는 점이였다.

그래서 나는 command.append(list(map(str, sys.stdin.readline().split()))) 이 코드를 통해

command안에 리스트 형태로 [문자열,문자열이 된 숫자] 이렇게 들어가게 했다.

이렇게 이차원 리스트 형태로 만들어 두고 두번째 인덱스가 0번째면 문자열이라는걸 이용해서

문제를 해결했다. (deque를 몰랐으면 좀 힘들었을지도..?)

반응형