다른 과제하다가 머리가 너무 복잡해서 심심풀이로 해본 문제. 의도에 맞게 풀었는지는 모르겠지만 답만 맞고 너무 복잡하지 않다면야 스스로 만족하련다.
문제 해석
Task
- N개의 정수로 이루어진 array 안의 요소들을 사이사이에 공백이 있고 순서는 반대인 한 줄의 결과물로 출력하라.
Input Format
- 첫번째 줄은 array의 elements 수인 N개의 정수라고 친절히 예고하는 값
- 두번째 줄이 위의 N개의 정수를 가진 array(list형)
문제 풀이
주어진 코드 해석하기
- 처음에 뭘 이렇게 많이 import한건지 겁부터 난다. 난 사실 사용한게 없기 때문에 아래 풀이는 문제의 의도를 빗겨간듯 하다.
1
2
3
4
5import math
import os
import random
import re
import sys - 드디어 아래와 같은 실행관련 코드가 나온다.
1
2
3
4if __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
2for _ in range(n):
print(arr.pop(), end=' ')- for문을 돌리면서 출력하되, 출력후 줄바꿈을 하지 않고
end=' '
로 공백으로 쌓이게 뒀다. (이렇게 하면 마지막 출력 후에도 공백이 하나 있다는 옥의 티가 있지만 submit은 잘만 되더라.)
- for문을 돌리면서 출력하되, 출력후 줄바꿈을 하지 않고
정석(?): list 순서 관련 메소드를 쓰는 방법으로는 (위에도
pop()
을 쓰긴 했지만)reverse()
로 list 내 순서를 반대로 해주는 방법이 있다.1
2arr.reverse()
print(*arr)*
을 그룹객체 바로 앞에 쓰면 그룹객체 안의 요소를 꺼내 콤마로 나열해준다.- print 인자에서 콤마로 연결된 녀석들은 공백을 자동으로 넣어주는 것을 이용하면 편하다.
느낀 점
생각해보니 정석이라고 풀이한 답엔 N이 들어갈 필요조차 없잖아? 그럼 오히려 꼼수로 내민 답이 출제자의 의도에 맞는건지도 모르겠다. 그래도 꼼수답에는 for문을 4번이나 돌리는 만큼 시간복잡도가 크니까 정석답이 더 낫지않나 하는 코린이 나름의 추리를 해본다. 꼼수든 정석이든 답만 맞으면 된다. 하지만 왜 저 앞에 import가 저렇게 많은건지는 아직도 모르겠다.