백준/백준 파이썬

백준 파이썬 Today I Learn 2023.05.30

군청레프 2023. 6. 3. 15:05
728x90

5/ 30 파이썬 공부
1. 백준 1371 가장 많은 글자
영어에서는 어떤 글자가 다른 글자보다 많이 쓰인다. 예를 들어, 긴 글에서 약 12.31% 글자는 e이다.
어떤 글이 주어졌을 때, 가장 많이 나온 글자를 출력하는 프로그램을 작성하시오.
첫째 줄부터 글의 문장이 주어진다. 
글은 최대 50개의 줄로 이루어져 있고, 각 줄은 최대 50개의 글자로 이루어져 있다. 
각 줄에는 공백과 알파벳 소문자만 있다. 문장에 알파벳은 적어도 하나 이상 있다.
첫째 줄에 가장 많이 나온 문자를 출력한다. 
여러 개일 경우에는 알파벳 순으로 앞서는 것부터 모두 공백없이 출력한다.

>>>코드1

w = []
while True:
    try:
        w.append(input())
    except:
        break
a = [0 for i in range(26)]
k = 97
for i in range(len(w)):    
    for j in range(26):
        a[j] += w[i].count(chr(k))
        k += 1
    k = 97
for i in range(26):
    if a[i] == max(a):
        print(chr(i+97), end = '')



여러 줄의 문자열을 입력받는 방법으로 오류 처리 함수 try: \n except: 함수를 이용했다

>>>코드2

import sys
w = sys.stdin.read()
a = [0 for i in range(26)]
k = 97
for j in range(26):
    a[j] += w.count(chr(k))
    k += 1
for i in range(26):
    if a[i] == max(a):
        print(chr(i+97), end = '')



여러 줄의 문자열을 입력받는 새로운 방법을 알아냈다.
import sys
sys.stdin.read()
함수를 사용하면 줄별로 입력 받는게 아니라 여러 줄을 한번에 입력받는다.

2. 백준 1434 책 정리
빈 박스 N개가 한 줄로 놓여져 있고, 박스에 책 M개를 넣으려고 한다. 
박스는 1번부터 N번까지 번호가 매겨져 있고, 책도 1번부터 M번까지 번호가 매겨져 있다. 
다음은 책을 박스에 넣는 방법이며, 가장 처음에는 1번 박스의 앞에 있고, 손에는 1번 책을 들고 있다.

(1) 현재 책이 현재 박스에 들어가지 않으면, 3번으로 간다. 아니면 2번으로 간다.
(2) 현재 책을 현재 박스에 넣는다. 다음 책을 손에 집고 1번으로 간다.
(3) 현재 박스를 다른 쪽으로 치운 다음에, 테이프로 못 열게 봉인한다. 다음 박스를 앞으로 가져오고 1번으로 간다.

i번 박스의 용량은 Ai이고, j번 책의 크기는 Bj이다. 
책의 크기와 박스에 들어있는 책의 크기의 합이 박스의 용량을 넘지 않으면 책을 박스에 넣을 수 있다.
위의 방법대로 책을 넣었을 때, 전체 박스의 낭비된 용량의 합을 구하는 프로그램을 작성하시오. 
박스의 낭비된 용량은 박스의 용량에서 박스에 들어있는 책의 크기의 합을 뺀 값이다.
입력으로 주어진 박스와 책의 순서를 변경하면 안된다.
첫째 줄에 박스의 개수 N, 책의 개수 M이 주어진다. 
둘째 줄에는 박스의 용량 A1, A2, ..., AN이 주어지고, 셋째 줄에는 B1, B2, ..., BM이 주어진다.
첫째 줄에 전체 박스의 낭비된 용량의 합을 출력한다.

>>> 코드

n, m = map(int, input().split())
box = list(map(int, input().split()))
book = list(map(int, input().split()))
a = []
i = 0
for j in range(m):
    if box[i] - book[j] >=0:
        box[i] -= book[j]
    else:
        i += 1
        box[i] -= book[j]
print(sum(box))



3. 백준 1392 노래 악보
현수는 학생들에게 노래를 가르치고 있다. 총 N개의 악보가 있고 i번째 악보는 Bi초로 이루어져 있다. 
학생들은 0초부터 1번 악보를 따라 노래하기 시작했다. 
즉 B1-1초에 1번 악보를 끝마치게 되고 B1초부터 B1+B2-1초까지 2번 악보를 따라 부르게 된다.

악보 1 1 2 3 3 3
시간 0 1 2 3 4 5

문제는 T1부터 TQ까지 Q개의 시간에 대해 대답을 하는 것인데, Ti초 때 노래하는 악보를 i번째에 출력하는 것이다.
첫 줄에는 악보 수 N(1 ≤ N ≤ 100)과 질문의 개수 Q(1 ≤ Q ≤ 1,000)가 주어진다. 
다음 N개의 줄에는 1번 악보부터 N번 악보까지 각 악보가 차지하는 시간(초)이 한 줄에 하나씩 주어진다. 
각 악보가 차지하는 시간은 100 이하의 정수이다. 
다음 Q개의 줄에는 알고자 하는 Q개의 시간(초)이 한 줄에 하나씩 주어진다. 묻는 시간 역시 정수만 주어진다.
Q개에 줄에 1번 질문부터 Q번 질문까지 해당 시간(초)에 부르는 악보의 번호를 출력한다.

>>>코드

n, m = map(int, input().split())
note = [] 
for _ in range(n):
    note.append(int(input()))
for _ in range(m):
    question = int(input())
    for j in range(n):
        if sum(note[:j+1]) > question:
            print(j+1)
            break



연산 문제인데
귀찮을 수 있다

4. 백준 1453 피시방 알바
세준이는 피시방에서 아르바이트를 한다. 세준이의 피시방에는 1번부터 100번까지 컴퓨터가 있다.
들어오는 손님은 모두 자기가 앉고 싶은 자리에만 앉고싶어한다. 따라서 들어오면서 번호를 말한다. 
만약에 그 자리에 사람이 없으면 그 손님은 그 자리에 앉아서 컴퓨터를 할 수 있고, 사람이 있다면 거절당한다.
거절당하는 사람의 수를 출력하는 프로그램을 작성하시오. 
자리는 맨 처음에 모두 비어있고, 어떤 사람이 자리에 앉으면 자리를 비우는 일은 없다.
첫째 줄에 손님의 수 N이 주어진다. N은 100보다 작거나 같다. 
둘째 줄에 손님이 들어오는 순서대로 각 손님이 앉고 싶어하는 자리가 입력으로 주어진다.
첫째 줄에 거절당하는 사람의 수를 출력한다.

>>>코드

n = int(input())
people1 = list(map(int, input().split()))
people2 = set(people1)
print(len(people1) - len(people2))



5. 백준 1550 16진수
16진수 수를 입력받아서 10진수로 출력하는 프로그램을 작성하시오.
첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 
16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.
첫째 줄에 입력으로 주어진 16진수 수를 10진수로 변환해 출력한다.

>>>코드

n = int(input(), 16)
print(n)
728x90