23.02.13 Day 11

오윤범·2023년 2월 13일
0

알고리즘

  • 백준 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였던거임!!!!!!!!

0개의 댓글