본문 바로가기

STUDY

파이썬 스터디 2주차(백준)

https://www.acmicpc.net/problem/2562

 

2562번: 최댓값

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

www.acmicpc.net

import sys

nums = []
for i in range(9):
  a = int(sys.stdin.readline())
  nums.append(a)

print(max(nums))
print(nums.index(max(nums)) + 1)

 

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램 작성

> 리스트명.index(a) : 리스트 내에서 a가 갖는 인덱스 값을 알려줌

> a = int(sys.stdin.readline()) \n nums.append(a) 대신 nums.append(int(sys.stdin.readline())) 으로도 할 수 있다!!!

 

 

https://www.acmicpc.net/problem/2577

 

2577번: 숫자의 개수

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

www.acmicpc.net

import sys

A = int(sys.stdin.readline())
B = int(sys.stdin.readline())
C = int(sys.stdin.readline())
mul = list(str(A * B * C))

for i in range(10):
  print(mul.count(str(i)))
세 개의 자연수 A, B, C가 주어질 때 A × B × C를 계산한 결과에 0부터 9까지 각각의 숫자가 몇 번씩 쓰였는지를 구하는 프로그램 작성

> 리스트, 튜플, 딕셔너리 등 반복가능한 것.count('a')는 a가 몇 개 있는지 세 줌

 

 

https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

import sys

nums = []
remainder = []

for i in range(10):
  nums.append(int(sys.stdin.readline()))
  if nums[i] % 42 not in remainder :
    remainder.append(nums[i] % 42)

print(len(remainder))
 
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구하고 서로 다른 값이 몇 개 있는지 출력하는 프로그램 작성

>import sys 꼭 포함해서 제출하자... 런타임에러 멈춰..

 

 

https://www.acmicpc.net/problem/8958

 

8958번: OX퀴즈

"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수

www.acmicpc.net

import sys

cases = int(sys.stdin.readline())
for a in range(cases):
  test = str(sys.stdin.readline().strip())
  score = 0
  sum_score = 0
  for b in range(len(test)):
    if test[b] == 'O':
      score += 1
      sum_score += score
    else :
      score = 0
  print(sum_score)

 

OX퀴즈의 결과가 있다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. "OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다. OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램 작성

> for문을 세 개 만들어서 점수를 구하는.. 매우 복잡하고 이상한 방식으로 식을 세우고 있었는데, 몇 시간을 고민해도 "OOOOOOOOOO"의 점수가 55가 나오지 않길래 구글링했다. 결론은 매우.. 간단하더라.... ㅠㅠ

> case 수만큼 반복(첫번째 for문)하는데, 이 때 score와 sum_score는 0이어야 한다. 각각의 case는 다른 점수를 출력해야 하기 때문.

각 케이스에서 입력받은 값의 길이만큼 반복(두번째 for문)하며 점수를 구한다. 인덱스값 0부터 len(test)-1까지 O라면 score 1점 추가, sum_score에 score를 합산하며 구한다.

(첫번째 값이 O이면 score=1, sum_score=1. 두번째 값도 O이면 score=2, sum_score = 3. 여기서 만약 세번째 값도 O이라면 score=3, sum_score=6이 되고, 세번째 값이 X라면 score=0, sum_score=3이 되는 것이다.)

그리고 두번째 for문이 끝난 시점에서 sum_score 값을 출력하면 각 테스트 케이스의 점수를 알 수 있다.

 

 

https://www.acmicpc.net/problem/4344

 

4344번: 평균은 넘겠지

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

www.acmicpc.net

import sys

C = int(sys.stdin.readline())
for i in range(C):
  students = list(map(int, sys.stdin.readline(). split()))
  N = students[0]
  scores = students[1:]
  mean = sum(scores) / N
  temp = 0
  for x in range(N):
    if scores[x] > mean:
      temp += 1
  perc = (temp/N) * 100
  print(f"{perc:.3f}%")
첫째 줄에는 테스트 케이스의 개수 C가 주어진다. 둘째 줄부터 각 테스트 케이스마다 학생의 수 N가 첫 수로 주어지고, 이어서 N명의 점수가 주어진다. 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
각 케이스마다 한 줄씩 평균을 넘는 학생들의 비율을 반올림하여 소수점 셋째 자리까지 출력한다.

> 뭔가.. 더 효율적으로 코드를 짤 수 있을 것 같은데, 잘 모르겠다. 일단 지금은 이게 제일 보기 좋고 깔끔한 것 같다.

> round(perc, 3)으로 했을 땐 틀렸는데 perc:.3f로 하니 맞았다. round로 하면 40.0%로 출력되지만 :.3f로 하니 40.000%로 출력되기 때문인 것 같다.

 

 

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

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

www.acmicpc.net

import sys

N = int(sys.stdin.readline())
ints = list(map(int, sys.stdin.readline().split()))
print(min(ints), max(ints))
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다.
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
 

남는 게 시간이라지만 활용하는 게 쉽지 않다. 

아직 화요일밖에 안 되었으니 수목금 화이팅!

 

+) 드디어 실버5 ㅠㅠㅠ

아주 귀여운게 마치 내 TFT 랭크같다..ㅎ

 

ㅋㅋㅋㅋㅋㅋ 골드까지 파이탱~!!