Python/알고리즘 문제 풀이

[코테] n의 배수 고르기

마이구미+ 2023. 4. 27. 10:25

<로직 고민>

  • numlist를 for문으로 돌리면서 하나씩 n으로 나눠서 나머지가 0이 아닌 경우 .remove()로 제거해볼까?
def solution(n, numlist):
    for num in numlist:
        if num % n != 0:
            numlist.remove(num)
    return numlist


print(solution(3, [4, 5, 6, 7, 8, 9, 10, 11, 12])) # [5, 6, 8, 9, 11, 12]
print(solution(5, [1, 9, 3, 10, 13, 5]))    # [9, 10, 5]
print(solution(12, [2, 100, 120, 600, 12, 12])) # [100, 120, 600, 12, 12]
  • 원하는 값이 나오지 않는군...왜지
  • 반대로 나머지가 0일 때 해당 숫자를 빈 리스트에 추가해보자..
  • 잉 근데 되네
  • 근데 1점...ㅎ
  • del 연산자를 써볼까
def solution(n, numlist):
    for num in numlist:
        if num % n != 0:
            del numlist[num]
    return numlist
    
# IndexError: list assignment index out of range
  • 아 인덱스 번호를 써야 하는구나..!
  • 그럼 드디어 여기서 enumrate를...!!
def solution(n, numlist):
    for num, i in enumerate(numlist):
        if num % n != 0:
            del numlist[i]
    return numlist
    
# IndexError: list assignment index out of range
  • 흠 같은 오류이군...num이랑 i를 프린트 해보자
def solution(n, numlist):
    for num, i in enumerate(numlist):
        if num % n != 0:
            print(num, i)
            # del numlist[i]
    # return numlist

# 출력화면
# 1 5
# 2 6
# 4 8
# 5 9
# 7 11
# 8 12
# None
# 1 9
# 2 3
# 3 10
# 4 13
# None
# 1 100
# 2 120
# 3 600
# 4 12
# 5 12
# None
  • 앗 i랑 num 위치를 바꿔야겠군
def solution(n, numlist):
    for i, num in enumerate(numlist):
        if num % n != 0:
            del numlist[i]
    return numlist
    
print(solution(3, [4, 5, 6, 7, 8, 9, 10, 11, 12])) # [5, 6, 8, 9, 11, 12]
print(solution(5, [1, 9, 3, 10, 13, 5]))    # [9, 10, 5]
print(solution(12, [2, 100, 120, 600, 12, 12])) # [100, 120, 600, 12, 12]
  • 똑같군...뭐가 문제...지.....
  • pop 해도 정답 안 나옴...
  • append만이 답인 것인가

<완성된 코드>

def solution(n, numlist):
    answer = []
    for num in numlist:
        if (num % n) == 0:
            answer.append(num)
    return answer

<다른 사람 풀이>

- 천재풀이1

def solution(n, numlist):
    return list(filter(lambda v: v%n==0, numlist))
  • 역시 또 한 줄짜리 코드가....
  • 아니 어케 이런 생각이 가능하지....100문제 풀면 가능해질까...

- 천재풀이2

def solution(n, numlist):
    return [num for num in numlist if num % n == 0]
  • 내 코드 한 줄로 바꾸면 이건가
  • 사실 축약 시도해 봤는데 어케 하는지 모르겠어서 계속 오류만 나고...그래서 포기..ㅎ