Day 7 - Arrays

다른 과제하다가 머리가 너무 복잡해서 심심풀이로 해본 문제. 의도에 맞게 풀었는지는 모르겠지만 답만 맞고 너무 복잡하지 않다면야 스스로 만족하련다.

문제 해석

Task

  • N개의 정수로 이루어진 array 안의 요소들을 사이사이에 공백이 있고 순서는 반대인 한 줄의 결과물로 출력하라.

Input Format

  • 첫번째 줄은 array의 elements 수인 N개의 정수라고 친절히 예고하는 값
  • 두번째 줄이 위의 N개의 정수를 가진 array(list형)

문제 풀이

주어진 코드 해석하기

  • 처음에 뭘 이렇게 많이 import한건지 겁부터 난다. 난 사실 사용한게 없기 때문에 아래 풀이는 문제의 의도를 빗겨간듯 하다.
    1
    2
    3
    4
    5
    import math
    import os
    import random
    import re
    import sys
  • 드디어 아래와 같은 실행관련 코드가 나온다.
    1
    2
    3
    4
    if __name__ == '__main__':
    n = int(input())

    arr = list(map(int, input().rstrip().split()))
    • 위의 input format에서 예고한대로 처음에는 N값을 준다.
    • arr 라는 변수에 인풋으로 들어온 녀석들의 공백을 제거하고 한개씩 list element로 담아놓은 다음에 각 요소를 integer로 type casting해주는 map함수를 썼다. 그 결과물은 list로 다시 type casting 해주었다.

해결하기

  • arr에는 n개의 정수가 있고, 나는 그것을 반대순서 + 공백을 사이에 둔 한줄의 결과물로 출력해야 한다.

  • 꼼수(?): 가장 나중의 index값을 가진 요소부터 호출하는 동시에 list에서는 지워버리는 pop() 메소드를 써서 처리했다.

    1
    2
    for _ in range(n):
    print(arr.pop(), end=' ')
    • for문을 돌리면서 출력하되, 출력후 줄바꿈을 하지 않고 end=' '로 공백으로 쌓이게 뒀다. (이렇게 하면 마지막 출력 후에도 공백이 하나 있다는 옥의 티가 있지만 submit은 잘만 되더라.)
  • 정석(?): list 순서 관련 메소드를 쓰는 방법으로는 (위에도 pop()을 쓰긴 했지만) reverse()로 list 내 순서를 반대로 해주는 방법이 있다.

    1
    2
    arr.reverse()
    print(*arr)
    • *을 그룹객체 바로 앞에 쓰면 그룹객체 안의 요소를 꺼내 콤마로 나열해준다.
    • print 인자에서 콤마로 연결된 녀석들은 공백을 자동으로 넣어주는 것을 이용하면 편하다.

느낀 점

생각해보니 정석이라고 풀이한 답엔 N이 들어갈 필요조차 없잖아? 그럼 오히려 꼼수로 내민 답이 출제자의 의도에 맞는건지도 모르겠다. 그래도 꼼수답에는 for문을 4번이나 돌리는 만큼 시간복잡도가 크니까 정석답이 더 낫지않나 하는 코린이 나름의 추리를 해본다. 꼼수든 정석이든 답만 맞으면 된다. 하지만 왜 저 앞에 import가 저렇게 많은건지는 아직도 모르겠다.