티스토리 뷰

#2577 숫자의 개수


세 개의 자연수 A, B, C가 주어질 때 A×B×C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램을 작성하시오.

 

 

입력


첫째 줄에 A, 둘째 줄에 B, 셋째 줄에 C가 주어진다. A, B, C는 모두 100보다 같거나 크고, 1,000보다 작은 자연수이다.

 

입출력 예제


입력 출력
150
266
427
3
1
0
2
0
0
0
2
0
0

 

풀이


tmp = 1
for i in range(3):
    input_data = int(input())
    tmp *= input_data

lst = list(str(tmp))
dic = dict()
for i in range(0,10):
    dic[i] = lst.count(str(i))
    print(dic[i])

 

 

우선 input data는 연속적으로 들어와야 하기 때문에 input이 되면서 누적 곱을 tmp 변수에 쌓아놓고,

이 값을 문자열로 치환한다.

다음으로 아무것도 없는 dictionary 에 0 ~ 9 까지의 key를 생성하면서 문자열로 치환한 변수에서


해당 값을 count 하며 Value 값을 할당해준다.

#3052 나머지


수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

 

 

 

입력


첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

 

 

입출력 예제


입력 출력
39
40
41
42
43
44
82
83
84
85
6

 

풀이


dic = dict()
for i in range(10):
    input_data = int(input())
    k = input_data % 42
    
    if k in dic.keys():
        dic[k] += 1
    else:
        dic[k] = 1
        
print(len(dic.keys()))

 

바로 위의 문제와 유사한 방법을 이용했다.

어차피 서로 다른 나머지 값의 개수만 출력하면 되는 점에 주목했다.

마찬가지로 input 값은 연속적으로 입력되기 때문에 for문 안에서 input을 받아주고,

비어있는 dictionary에 input으로 받은 값을 42로 나눈 값을 key 값으로 할당한다.

이 때, 만약 key 가 있으면 이미 해당 나머지는 등장했다는 뜻이기에 key를 할당하는 것이 아닌

Value 값만 +1 해준다. ( Pass 로 해주어도 무방하다. )

최종적으로 key의 갯수만 출력해주면 우리가 원하는 결과를 구할 수 있다.

#1546 평균


세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다. 

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다.

둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

 

 

입출력 예제


입력 출력
3
40 80 60
75.00
3
10 20 30
66.666667
4
1 100 100 100
75.25

 

풀이


subject = int(input())
score = list(map(int,input().split(' ')))
M = max(score)

new_score = list(map(lambda x : round((x / M) * 100, 2) ,score))
print( sum(new_score)/subject )

 

귀여운 세준이.

lambda를 이용했지만 리스트 내장객체를 사용해도 된다!

주의할 점은 괄호를 잘 사용할 것..

#8958 OX퀴즈


"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다.

O는 정답이고, X는 오답이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다.

OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 길이가 0보다 크고 80보다 작은 문자열이 주어진다. 문자열은 O와 X만으로 이루어져 있다.

 

입출력 예제


입력 출력
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
10
9
7
55
30

 

풀이


case = int(input())
for i in range(case):
    res = list(input())
    score = 0
    total = list()
    for i in res:
        if i == 'O':
            score += 1
            total.append(score)
        else:
            score = 0
            total.append(score)
    print(sum(total))

 

리스트의 값을 하나씩 가져올 때, 연속적으로 O 가 나오면 score가 누적되어야 하고,

그렇지 않으면 다시 0으로 초기화시켜야 한다.

score를 새로운 배열로 만들어서 모든 값을 sum하는 방식으로 해결하였다.

#4344 평균은 넘겠지~~


대학생 새내기들의 90%는 자신이 반에서 평균은 넘는다고 생각한다. 당신은 그들에게 슬픈 진실을 알려줘야 한다.

 

입력


첫째 줄에는 테스트 케이스의 개수 C가 주어진다.

둘째 줄부터 각 테스트 케이스마다 학생의 수 N(1 ≤ N ≤ 1000, N은 정수)이 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

 

입출력 예제


입력 출력
5
5 50 50 70 80 100
7 100 95 90 80 70 60 50
3 70 90 80
3 70 90 81
9 100 99 98 97 96 95 94 93 91
40.000%
57.143%
33.333%
66.667%
55.556%

 

풀이


case = int(input())
for i in range(case):
    input_data = list(map(int,input().split(' ')))
    n = input_data.pop(0)
    mean = sum(input_data) / n
    
    res = [i for i in input_data if i > mean]
    prob = round(len(res) / n * 100,3)
    
    print('%0.3f%%'%prob)

 

슬프 진실을 알려주었다..

주의할 점은 출력할 때 소숫점 3번째 자리까지 출력을 해주어야 한다는 점,

그래서 결과값도 혹시 몰라 round 해주었다!

 

 

 

@ 문제 출처 : https://www.acmicpc.net/step/6

댓글
링크
최근에 올라온 글
Total
Today
Yesterday