본문 바로가기
알고리즘 풀이

[알고리즘] 백준 | 나머지, 바구니 뒤집기, 평균

by 째깍단 2023. 9. 7.

1차원 배열 끝!

 

3052 나머지

답: 

더보기
from sys import stdin

input = stdin.readline

answer = []
new = 0
for _ in range(10):
    number = int(input())
    new = number % 42
    answer.append(new)
print(len(set(answer)))

 

 

문제 분석 및 해석

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다.

예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

 

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다.

그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

 

입력

1

2

3

4

5

6

7

8

9

10

출력

10

 

 

 

리뷰.

set으로 중복을 삭제하고 len으로 길이를 구했다

 

 


10811 바구니 뒤집기

답: 

더보기
from sys import stdin

input = stdin.readline
N, M = map(int, input().split())

bucket = [i for i in range(N+1)]
for _ in range(M):
    start, end = map(int, input().split())
    bucket = bucket[:start] + bucket[end:start-1:-1] + bucket[end+1:]
print(*bucket[1:])

 

 

문제 분석 및 해석

각각의 바구니에는 1번부터 N번까지 번호

바구니는 일렬, 가장 왼쪽 바구니를 1, 가장 오른쪽 바구니를 N번째 바구니. 

 

도현이는 앞으로 M번 바구니의 순서를 역순으로 만들려고 한다.

 

한 번 순서를 역순으로 바꿀 때,

1) 순서를 역순으로 만들 범위를 정하고,

2) 그 범위에 들어있는 바구니의 순서를 역순으로 만든다.

 

가장 왼쪽 바구니부터 출력하는 프로그램을 작성하시오.

 

입력

5 4

1 2

3 4

1 4

2 2

출력

3 4 1 2 5

 

 

>> 풀이생각

범위연산자로 앞, 바꾸자하는 범위, 뒤를 더해 bucket을 새로이 확인하고자 했다

 

start end를 각각 -1하고 시작할까 했지만 계산이 번거로워지는 것 같아서

bucket에 0번 인덱스를 넣고 풀이한 후 잘라 출력하는 방식을 취했다.

 

 

 

 

리뷰.

범위 연산자를 재차 공부할 수 있었다

 

특히 역순으로 만드는 것을 재 공부했는데 원하는 값이 나오지 않은 이유를 print해보며 파악했다

start값 end값... 위치를 확인해야하고, range처럼 두번째 인자는 +1을 해주어 범위를 늘려주어야한다

 

  • [start:end] : start 부터~ end 전 값까지 출력된다
  • [start:end+1] : start 부터~ end 값의 범위를 출력된다
  • [start:end:-1] : 미출력된다. 큰값이 앞으로 와야한다
  • [end:start:-1] : 큰값(end)부터 차례로 start보다 하나 큰 요소까지  출력된다
  • [end:start-1:-1] : 의도하고자 한 값 = end와 start를 포함하여 역순으로 출력한다

 

 

 


1546 평균

답: 

더보기
from sys import stdin

input = stdin.readline

N = int(input())
score = list(map(int, input().split()))

max_score = max(score)
print((sum(score) / max_score * 100) / N)

 

 

문제 분석 및 해석

 

세준이는 기말고사를 망쳤다.

세준이는 점수를 조작해서 집에 가져가기로 했다.

일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다.

그리고 나서 모든 점수를 점수 / M*100으로 고쳤다.

 

예를 들어, 세준이의 최고점이 70이고,

수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

 

세준이의 성적을 위의 방법대로 새로 계산했을 때,

새로운 평균을 구하는 프로그램을 작성하시오.

 

입력

3

40 80 60

출력

75.0

 

방법: ( 모든 점수를 더한 점수 / M*100 ) / N

 

 

리뷰

식은 다 주어져서 따라가면서 풀이했다.

내용이 이해가 안돼서 여러번 읽어보았는데 백분율 점수로 바꾸는...문제였던듯

 

 


sqld 준비로 간단한 구현 알고리즘풀이 중이다

더 재밌는문제 풀고싶당..