프로그래머스 OX 퀴즈

2022. 12. 19. 22:32Python/Algorithm

728x90

내가 접근했었던 접근법

(접근법은 좋았던거같다. 하지만 약 1시간째 이 수많은 배열들을어떻게 처리해야하나...? 하고 고민하는사이 지나간것 같다.)

def solution(quiz):
#내가 해야할것
#배열을 잘라 a, b, c, d, e 로 분해하는데
#이때 a숫자 b수식 c숫자 d등호 e답안으로 분해한다
#공백을 기준으로 분해를 하여 5개로 만든후에
#이때 a 수식 c가 e일경우
#O를
#아닐경우 X를 반환하게 만든다.
    a = ', '.join(map(str, quiz))
    a2 = a.split(', ')
    # print(a2)
    a3 = ' '.join(a2)
    # a4[0] 첫번째숫자
    # a4[1] 수식
    # a4[2] 숫자
    # a4[3] 등호
    # a4[4] 답
    #a[1]이 - 일때는 숫자를 빼고
    #a[1]이 + 일때는 숫자를 더해서
    #a4[0]과 a4[2]를 더하거나 뺀 값이 a4[4]와 일치할 경우 O 아니면 X를 반환
    a4 = a3.split(' ')
    a5 = ''.join(a3) #하나씩 쪼개기
    for i in range(0, len(a4)):
        
        print(a4[i])
        if a4[1] == "-":
            result = int(a4[i]) - int(a4[i+5])
            print(result)
        #매 [0]부터 5씩 더하면 첫 숫자
        #매 [1]부터 5씩 더하면 수식
        #매 [2]부터 5씩 더하면 두번째 숫자
        #매 [3]부터 5씩 더하면 등호
        #매 [4]부터 5씩 더하면 답안
        
        
    
    # if a4[1] == '-':
    #     result = int(a4[1]) - int(a4[3])
    # elif a4[1] == '+':
    #     result = int(a4[1]) + int(a4[3])
    #     print(result)

정해놓은 시간 (1시간 30분)이 지나서 나와 가장 비슷하게 생각한 답안을 찾아보았다.

 

def solution(quiz):
    answer = []
    #답은 빈 리스트로 선언해주고
    for i in quiz:
    #첫번째 for문은 quiz의 길이만큼 도는데
        a = i.split("=")
        #이때 a는 =를 기준으로 자른 i들을 담는다
        for j in range(len(a)):
            #두번째 for문은 0부터 a의 길이(여기선 언제나 2)만큼 돈다.
            #이때 a[0]은 등호 전까지의 수식이며
            #a[1]은 식의 답이다.
            #왼쪽의 값은 첫번째 loop에서
            #3 - 4를 eval 내장함수를 통해 string도 계산하여 -1을 얻고
            #오른쪽의 값은 첫번째 loop에서
            #a[len(a)-1] 은 a[1]이다. (리스트는 0부터 세기때문에)
            #그리고 다시 이 값 -1과 a[1]=-3을 비교하여 맞으면 O를 answer에 삽입후 if문을 빠져나와
            #다음 loop을 돈다.
            if eval(a[0]) == eval(a[len(a)-1]):
                answer.append("O")
                break
            else:
                answer.append("X")
                break
    return answer

quiz = ["19 - 6 = 13", "5 + 66 = 71", "5 - 15 = 63", "3 - 1 = 2"]
solution(quiz)

배운것

eval()

매개변수로 받은 식 (expression) 을 문자열로 받아서, 실행하는 함수

eval('수식',globals=None, locals=None)

'수식'

  • 여기에 문자열 형태 표현식[ ex) 1+1 ]을 입력받을수 있음(필요 값)

'globals '

  • 선택적으로 쓰며, 사용하는 경우 변수  값 형태의 딕셔너리를 사용

'locals'

  • 선택적으로 쓰며, 모든 매핑 객체를 사용할 수 있음.

 

 

 

결론 : 더 쉬운걸 풀어보자