1292번: 쉽게 푸는 문제 (브론즈1)
문제
정답
이중 반복문 문제!
내 풀이 방식은 반복문을 사용안한 노가다 형태이다. 정답은 잘나오는데, 백준에 제출했더니 시간초과로 오답처리되었다. 악으로 깡으로 맞췄다는 거에 만족한다..
최근에 1193번을 풀었어서 입력값이 몇번째 줄에 몇번째 숫자인지 찾으려고 했다.
문제에 예제로 나온 것으로 설명해보겠다. 입력 3 7 / 출력 15
3은 2번째 줄 2번째 숫자이고, 7은 4번째 줄 1번째 숫자인 걸 먼저 찾고, 하나씩 경우를 따져서 더해줬다.
4번째 줄과 2번째 줄 사이 값들은 제곱으로 다 더해주는 형태로 해결했다. 완벽한 노가다!
# 내 정답 -> 시간초과로 오답
n = list(map(int,input().split()))
arr = []
answer = 0
# 입력값들이 몇번째 줄에 몇번째 숫자인지 찾기
line0 = 1
while n[0] > line0:
n[0] -= line0
line0 += 1
line1 = 1
while n[1] > line1:
n[1] -= line1
line1 += 1
#경우에 따라 answer에 더해주기
if n[0] == line0:
answer += line0
else:
answer += line0*(line0-n[0]+1)
answer += line1*n[1]
# 중간에 있는 숫자들도 더해주기
line = line1-line0
while line != 1:
answer += (line+1)*(line+1)
line -= 1
answer
난 너무 코딩초보자라 저런 이중반복문을 보면 감탄만 나온다 ㅋㅋㅋㅋ
a와 b의 범위가 1000이기 때문에 len(arr)=1036이라 range(46)으로 설정한다. 아니면 입력받은 b+1까지 range로 설정해도 된다.
i를 range(i)만큼 만들어서 arr에 append하기
# 보통 사람들의 정답
a, b = map(int,input().split())
arr = [0]
for i in range(46):
for j in range(i):
arr.append(i)
print(sum(arr[a:b+1])
공부한 내용
1. 이중반복문 사용하기
2. 인덱싱 사용하기
아래 1번과 2번은 같은 코딩이다. 이왕이면 짧고 깔끔하게 쓰려고 노력하자!
인덱싱한 list에 sum 연산 가능하다.
# 1번
sum(arr[a:b+1])
# 2번
sum = 0
for i in range(a,b+1):
sum += arr[i]
print(sum)
레퍼런스
- 다른 정답 풀이
- 깃허브 정답
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 백준 1356번 유진수 (0) | 2023.01.09 |
---|---|
[Python3] 백준 1296번 팀 이름 정하기 (0) | 2023.01.06 |
[Python3] 백준 1268번 임시 반장 정하기 (0) | 2023.01.05 |
[Python3] 백준 1259번 팰린드롬수 (0) | 2023.01.04 |
[Python3] 백준 1236번 성 지키기 (1) | 2023.01.03 |
댓글