728x90
[파이썬] 프로그래머스 Lv0. OX퀴즈
안녕하세요 머킹입니다.
드디어 이사가 끝났습니다!!!! 야호!!!!!!!!!
OX퀴즈
def solution(quiz):
answer = []
for i in quiz:
div = i.split(' ')
if div[1] == '-':
a = int(div[0]) - int(div[2])
answer.append("O" if a == int(div[4]) else "X")
elif div[1] == '+':
a = int(div[0]) + int(div[2])
answer.append("O" if a == int(div[4]) else "X")
return answer
이렇게 풀었습니다!
은근 생각을 많이 했던 문제였습니다
[풀이 설명]
- solution 함수는 quiz라는 이름의 매개변수를 받습니다. 이 quiz는 문자열로 된 퀴즈들의 리스트입니다.
- answer라는 빈 리스트를 초기화합니다. 이 리스트는 퀴즈 결과를 저장할 것입니다.
- for i in quiz: 루프를 사용하여 각각의 퀴즈에 대해 아래의 작업을 반복합니다.
- i.split(' ')를 사용하여 현재 퀴즈를 공백을 기준으로 나눕니다. 이렇게 나눈 결과는 div 리스트에 저장됩니다.
- div [1]이 연산자를 나타냅니다. 만약 연산자가 '-'이면, int(div [0]) - int(div [2])를 계산하여 a에 저장합니다. 그리고 a가 int(div [4])와 같다면 "O"를, 다르다면 "X"를 answer 리스트에 추가합니다.
- 만약 연산자가 '+'이면, int(div[0]) + int(div[2])를 계산하여 a에 저장합니다. 그리고 a가 int(div[4])와 같다면 "O"를, 다르다면 "X"를 answer 리스트에 추가합니다.
- 모든 퀴즈에 대한 평가가 끝나면 최종적인 answer 리스트를 반환합니다.
이런 논쟁(?)이 있었는데요.
되게 흥미로운 주제였습니다.
궁금해서 한 번 찾아봤어요.
파이썬 문서에는 이렇게 설명이 되어있습니다.
왜 보안이슈가 있을까에 대해서 더 찾아보니 아래와 같다고 합니다.
- 보안 취약점과 악용 가능성: eval()은 임의의 코드를 실행할 수 있기 때문에, 사용자 입력이나 외부 소스로부터의 데이터를 포함하는 문자열을 평가하는 것은 매우 위험합니다. 사용자가 제어할 수 없는 데이터가 평가될 경우, 악의적인 코드가 실행될 가능성이 있습니다.
- 명령어 주입 (Code Injection): 사용자가 입력한 문자열이 그대로 eval()에 전달되면, 사용자가 의도하지 않은 코드가 실행될 수 있습니다. 이는 보안 취약점으로 이어질 수 있습니다.
- 보안 정책 회피: eval()을 사용하면 보안 정책을 우회하거나 우회할 수 있는 시도가 발생할 수 있습니다. 이는 코드의 의도치 않은 동작을 초래할 수 있습니다.
- 약한 예외 처리: eval()은 구문 오류가 발생하면 예외를 발생시키지만, 런타임 오류는 잡지 않습니다. 따라서 잘못된 코드가 프로그램을 중단시킬 수 있습니다.
- 비용이 높은 동적 코드 실행: eval()은 실행 시간에 코드를 동적으로 컴파일하고 실행하므로, 코드 실행에 비용이 발생합니다. 무분별한 사용은 성능에 영향을 미칠 수 있습니다.
안전성과 보안을 고려할 때, eval()을 사용하는 것은 피하는 것이 좋습니다. 대신에 안전한 방법으로 사용자 입력을 처리하거나, 더 안전한 대안을 사용하는 것이 권장됩니다. 안전한 대안으로는 ast.literal_eval() 함수나 필요한 작업에 따라 특정한 파싱 또는 검증 방법을 사용하는 것이 있습니다.
흥미로운 코테였습니다~!
'오늘부터 코딩테스트' 카테고리의 다른 글
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 입문 프로그램 풀기 (0) | 2023.12.20 |
---|---|
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 입문 프로그램 풀기 (0) | 2023.12.19 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 입문 프로그램 풀기 (0) | 2023.12.12 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 입문 프로그램 풀기 (0) | 2023.12.08 |
[오늘부터 코딩테스트]파이썬으로 프로그래머스 코딩 입문 프로그램 풀기 (0) | 2023.12.06 |