프로그래머스_Python_오답노트_ 변수 for i in 리스트 if 조건, 값1 if 조건 else 값2 for i 변수 in 리스트 구문 비교

HEE·2025년 3월 21일
0
post-thumbnail

1. 프로그래머스 python 코딩테스트

Level 1. 나누어 떨어지는 숫자 배열

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

오답 확인

  1. return [ i for i in arr if i % divisor == 0 else -1 ]
  • ifelse의 위치가 잘못됨.
    리스트 컴프리헨션으로 if조건 뒤 else가 오려면, [값1 if 조건 else 값2 for i in 리스트]의 삼항자 연산식이어야함. 즉 else가 빠지거나/ 삼항자연산식을 써야함.
  1. return [ i if i % divisor == 0 for i in arr]
  • if 뒤에 바로 for가 올 수 없음! else가 빠짐! 리스트 컴프리헨션에서 if 썼으면 else를 써서 삼항자 연산식으로 써야함. [값1 if 조건 else 값2 for i in 리스트]여야함.
  1. return [ i if i % divisor == 0 else -1 for i in arr]
    Q. 리스트 컴프리헨션으로 쓰려면 문법을 맞추라고 해서 맞췄는데도 틀림.
    A. 이건 모든 값을 리스트로 만든것. 문제는 딱 떨어지는것만 [ ] 리스트하고, 나누어 떨어지는게 없으면 [-1] 단독으로 리스트해야함.
    그런데 이건 결과값이 섞여서 나옴. [5,10,-1,20,-1] 이런식으로 나와버림. 따라서 else를 분리해줘야함.

정답 확인

[i for i in 리스트 if 조건]

def solution(arr, divisor):
    A = sorted([i for i in arr if i % divisor == 0])
    return A if A else [-1]
  • sorted(리스트) : 리스트 오름차순 정렬
  • for리스트 []안에 넣을때는 반드시 for앞에 넣을값i와 같은 변수가 있어야함. '무엇을 넣을지'말하지 않으면 혼란스러움.
  • else를 따로 빼서, 다음줄에 값1 if 조건 else 값2로 표현. if조건으로 값을 뜻하는 변수가 온 경우, 값이 있으면 True, 값이 없으면 False라서, 만족하는 값이 없는 경우, else [-1]이 됨.
  • 문제에서 요구하는게 []리스트 형식이기 때문에 -1이 아닌, [-1]로 작성.

    삼항자 조건 연산자와 리스트 컴프리헨션 비교

  1. 삼항자 조건 연산자 : 값1 if 조건 else 값2 이며, 단순 조건따라 둘 중 하나값을 정하는것. []사용 의미 없음. 가능은 하지만, 1개짜리 리스트를 만드는것과 같음.
x = 5
result = "짝수" if x % 2 == 0 else "홀수"
print(result) 
  1. 리스트 컴프리헨션 : [값1 if 조건 else 값2 for i in 리스트] 반드시 for가 뒤에 나와야함.
profile
ALL IS WELL

0개의 댓글