알고리즘
백준 11720번 (숫자의 합 구하기)
- 1번 풀이
n=input() nums=list(input()) sum=0 for i in nums: sum+=int(i) print(sum)
- 2번 풀이
print(sum(map(int,input())))
--> 1번풀이로 접근 후 2번풀이도 해봄.
--> map에 대해서 잘 몰랐는데 알게됐음.
cf) map을 잘 모르겠어서n=map(int,input()) print(n)
으로 54321 찍어보니까 출력이 <map object at 0x000001EDC685B310> 으로 찍혀나와서
찾아보니까 54321로 찍게되면 컴퓨터가 아는 형태로 5개의 공간을 쓰는게 아니라 한 공간에 54321을 가지고 있는거였고 거기에 list나 tuple을 사용하게 되면 사용자가 보기 좋은 형태로 뽑아 올 수 있는거였음 ( 그림 참조 )
1,2,3,4,5를 컴퓨터가 아는 형태로 가지고 있고 사용자가 sum과 같은 함수를 호출하게되면 안에서 뽑아서 더하는 그런 느낌적인 느낌
백준 1546번 (평균 구하기)
n=input() mylist=list(map(int,input().split())) mymax=max(mylist) sum=sum(mylist) print(sum*100/mymax/int(n))
--> 모든 점수를 (점수/최댓값*100)으로 계산해야하는데 A,B,C를 입력받는다고 쳤을 때,
((A/M * 100 + B / M * 100 + C / M * 100))/3 으로 계산 가능 한데, 이걸 하나로 합치게 되면 (A+B+C)*100/M/3
--> 다음과 같이 (A+B+C)*100/M/3 과 같이 깔끔한 식으로 변경 할 수 있는 수학적 능력이 제일 중요해보임.... 바로 생각 안났고 풀이 보니까 생각났음
백준 3003번
original=[1,1,2,2,2,8] n=list(map(int,input().split())) for i in range(len(original)): print(f'{original[i]-n[i]}',end=' ')
--> 분명 문제가 한국말로 적혀있는데 알아보기 어렵다...
백준 11659 구간 합 구하기
import sys input=sys.stdin.readline data,ask=map(int,input().split()) list1=list(map(int,input().split())) range_sum=[0] temp=0 for i in list1: temp+=i range_sum.append(temp) for i in range(ask): start,end=map(int,input().split()) print(range_sum[end]-range_sum[start-1])
--> 상단 두줄은 시간 초과 때문에 필요함. Jupyter Notebook에서는 돌아가지 않기에 해당 소스를 돌리고 싶으면 .py에서 돌려야함
--> range_sum=[5,9,12,14,15]로 들어가고,질의로 1 3 을 입력한다고 했을 때, range_sum[3]-range_sum[0]인데 이러면 14-5해서 아닌가 생각했는데 12-0으로 12가 나옴..
list index 시작이 0부터인것같은데 왜 여기서는 인덱스 계산을 1부터 넣었는지???????
--> 위와 같이 생각했는데 구간합을 구하는거니까 range_sum[] 즉 구간합의 초기값은 0으로 설정해놔야함. 즉 range_sum=[0] 으로 시작을 하는것임.
--> [0] 여기다가 .append로 5,9,12,14,15 를 더해가는 거니까 range_sum=[0,5,9,12,14,15]가 되기에 range_sum[3]-range_sum[0] 하면 12였던거임!!!!!!!!