백준 4단계 코딩테스트

릿·2023년 2월 14일
0

코딩테스트

목록 보기
24/27

1. 개수세기 (10807)

문제:
총 N개의 정수가 주어졌을 때, 정수 v가 몇 개인지 구하는 프로그램을 작성하시오.

입력 :
첫째 줄에 정수의 개수 N(1 ≤ N ≤ 100)이 주어진다. 둘째 줄에는 정수가 공백으로 구분되어져있다. 셋째 줄에는 찾으려고 하는 정수 v가 주어진다. 입력으로 주어지는 정수와 v는 -100보다 크거나 같으며, 100보다 작거나 같다.

출력 :
첫째 줄에 입력으로 주어진 N개의 정수 중에 v가 몇 개인지 출력한다.

1. 내 풀이

a = int(input())
li = list(map(int, input().split()))
v = int(input())
cnt=0
    
for i in range(a) :
    if li[i] == v :
        cnt+=1
            
print(cnt)

2. 다른 사람의 풀이

  • 파이썬 내장함수 count를 사용하여 v가 리스트에 몇 개 있는지 확인
a = int(input())
li = list(map(int, input().split()))
v = int(input())
    
print(li.count(v))

2. X보다 작은 수 (10871)

문제:
정수 N개로 이루어진 수열 A와 정수 X가 주어진다. 이때, A에서 X보다 작은 수를 모두 출력하는 프로그램을 작성하시오.

입력 :
첫째 줄에 N과 X가 주어진다. (1 ≤ N, X ≤ 10,000)

둘째 줄에 수열 A를 이루는 정수 N개가 주어진다. 주어지는 정수는 모두 1보다 크거나 같고, 10,000보다 작거나 같은 정수이다.

출력 :
X보다 작은 수를 입력받은 순서대로 공백으로 구분해 출력한다. X보다 작은 수는 적어도 하나 존재한다.

1. 내 풀이

a, b = map(int, input().split())
li = list(map(int, input().split()))

for i in range(a) :
    if li[i] < b :
        print(li[i], end=' ')

3. 최소, 최대 (10818)

문제: N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.

입력: 첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

출력: 첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.

1. 내 풀이

  • 파이썬 내장함수 max와 min을 사용
a = int(input())
li = list(map(int, input().split()))
maxNum = max(li)
minNum = min(li)
print(minNum, maxNum)

4. 최댓값 (2562)

문제: 9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

입력: 첫째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

출력: 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

1. 내 풀이 (오답)

  • 코드만 보면 잘 나올 것 같은데 왜 틀리는 지 모르겠다며 의아해해고 있었는데 몇번 째인지 물어보는데 index를 반환해서 틀린 거였음...
maxNum = 0
index = 0

for i in range(0, 9):
    a = int(input())
    if maxNum < a :
        maxNum = a
        index = i+1
print(maxNum)
print(index)

2. 다른 사람의 풀이

  • 내장함수인 max와 index를 이용해서 풀이
num_list = []
for i in range(9):
	num_list.append(int(input()))
print(max(num_list))
print(num_list.index(max(num_list))+1)

5. 과제 안 내신 분..? (5597)

문제: X대학 M교수님은 프로그래밍 수업을 맡고 있다. 교실엔 학생이 30명이 있는데, 학생 명부엔 각 학생별로 1번부터 30번까지 출석번호가 붙어 있다.

교수님이 내준 특별과제를 28명이 제출했는데, 그 중에서 제출 안 한 학생 2명의 출석번호를 구하는 프로그램을 작성하시오.


입력: 입력은 총 28줄로 각 제출자(학생)의 출석번호 n(1 ≤ n ≤ 30)가 한 줄에 하나씩 주어진다. 출석번호에 중복은 없다.

출력: 출력은 2줄이다. 1번째 줄엔 제출하지 않은 학생의 출석번호 중 가장 작은 것을 출력하고, 2번째 줄에선 그 다음 출석번호를 출력한다.

1. 내 풀이

먼저 1~30이 든 배열을 만들어서 입력받은 remove로 빼준 다음, min과 max값을 출력함

li = [i for i in range(1, 31)]
for i in range(28) :
    a = int(input())
    li.remove(a)
print(min(li))
print(max(li))

2. 다른 사람의 풀이

set함수로 빼기를 하면 중복만 제거된다고 함!

li1 = list(range(1, 31))
li2 = []

for i in range(28) :
  li2.append(int(input()))

sli1 = set(li1)
sli2 = set(li2)
c=sli1-sli2

print(min(c))
print(max(c))

6. 나머지

문제: 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

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

출력: 첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.

1. 내 풀이

42로 나눈 나머지를 배열에 넣고 set함수를 써서 중복제거 후 배열의 길이를 반환함

li = []
for i in range(10) :
    a = (int(input()))%42;
    li.append(a)
sli = set(li)
print(len(sli))

7. 평균

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

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70
100이 되어 71.43점이 된다.

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

입력: 첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력: 첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

1. 내 풀이

  • 입력값의 maxNum으로 기존에 입력받은 점수들을 변환 후, 다 더해서 평균을 냈음
a = int(input())
li = list(map(int, input().split()))
maxNum = max(li)
li2 = []

for i in range(a) :
    li2.append(li[i]/maxNum*100)

sum = 0

for i in range(a) :
    sum += li2[i]
    
print(sum/a)

2. 다른 사람의 풀이

  • 이렇게 짧게 쓸 수도 있다...
n=int(input())
a=list(map(int,input().split()))
m=max(a)
sum=0
for i in range(n):
    a[i]=a[i]/m*100
    sum+=a[i]
print(sum/n)
profile
항상 재밌는 뭔가를 찾고 있는 프론트엔드 개발자

0개의 댓글