데이터 처리(Code force : Easy Problem, 800.)
- 학습 목표
기본적인 데이터의 값을 정확히 가져올 수 있는지 판단합니다 각 변수의 값을 sys.stdin.readline을 이용하여 받습니다. 리스트 컴프리헨션을 사용하여 코드를 보기 좋게 한 번더 최적화를 진행 합니다.
input()을 얼마나 정확히 값을 다루는 지, 혹은 사칙연산이 가능한지 여부를 판단합니다.
t = input만큼 받아오고 2부터는 n의 값으로 input()을 순회 합니다.
메모리 동작을 빠르게 하기 위해
데이터를 불러올 때 시스템.기본 인풋.리드라인으로 한 줄 씩 빠르게 변수에 할당 합니다.
1-1.
import sys
input = sys.stdin.readline t = int(input().strip())
for _ in range(t): # t번 반복 n = int(input().strip()) # 각 테스트 케이스에서 n을 하나 받음 # 양의 정수 (a,b) 중 a + b = n => 개수 = n - 1 print(n - 1)
t의 값은 1부터 99 이하의 값의 크기이며 각 테스트 케이스의 숫자이기도 합니다.
t의 값이 한 번 인풋되어있기 때문에 그다음의 인풋은 3의 다음값을 차례로 받게 됩니다.
즉, 2->4->6의 값을 받게되고 순서대로 1->3->5의 값이 출력이 되겠습니다. 출력은 n - 1로 풀어도 되겠습니다.
#1-2.
import sys
input = sys.stdin.readline t = int(input().strip())
[print(int(input().strip()) - 1) for _ in range(t)]
리스트 컴프리헨션을 사용하여 코드를 컴팩트하게 수정했습니다.
풀이 조건만 맞으면 되니깐 코드는 그렇다쳐도… 여기 수준에서만 놀고 싶은 게 아니잖아요?
좀 더 문제를 깊이 파고들어봅시다.
- 이해.
큐브는 n에 양수 값을 갖고있다고 합니다. 그녀는 양수 (a,b)의 순서쌍을 알고싶다네요? 근데 찾아보니 a = n - b라는 식을 발견했데요 하지만 좋은 수학 풀이법은 아니랍니다.
-
우선 저 조건이 좋지 않다면? 즉, 둘다 양의 정수여야 되니깐. a + b = n으로 값을 조정해도 되는 부분이죠?
-
또한, t의 값은 1부터 99까지의 값을 갖고있는데 왜 3이라는 값을 첫 줄에 써놨으면서 99까지의 조건을 줬을까요?
(n 또한 동일.)
2번은 앞으로 높은 난이도를 목표로한다면 시간 복잡도에 유의 해야합니다.
보통 이중 for문의 경우 o^2의 시간 복잡도를 갖고 있습니다. 이를 list로 받고 len()으로 문자열 길이만큼 읽어 온다면 O(n)의 복잡도가 가산이 됩니다.
불필요한 시간 복잡도는 앞으로 소개해드릴 제너레이터나 재귀 함수에서는 functools.lru_cache를 사용하여 시간 복잡도를 줄일 수 있겠습니다.
간단한 소개를 하기 위해 작성했습니다.