백준 파이썬 Today I Learn 2023.06.20
6/ 20 파이썬 공부
1. 백준 2702 초6 수학
두 정수 a와 b 최소공배수는 두 수의 공통된 배수 중 가장 작은 수이고, 최대공약수는 두 수의 공통된 약수중 가장 큰 수이다.
a와 b가 주어졌을 때, 최소공배수와 최대공약수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T(1<=T<=1,000)가 주어진다.
각 테스트 케이스는 두 정수 a와 b로 이루어져 있고, 공백으로 구분되어 있다. (1 <= a,b <= 1,000)
각 테스트 케이스에 대해 최소공배수와 최대공약수를 차례대로 출력한다.
>>>코드
for _ in range(int(input())):
n, m = map(int, input().split())
a, b = n, m
while b != 0:
c = b
b = a%b
a = c
print(a*(n//a)*(m//a), a)
유클리드 호제법을 사용하면 쉽게 정답이 나온다.
2. 백준 2858 기숙사 바닥
상근이는 기숙사 생활을 한다. 상근이의 방의 크기는 L×W 이다.
수업시간에 타일 채우기 경우의 수를 계산하던 상근이는 자신의 방도 1×1크기 타일로 채우려고 한다.
이때, 가장자리는 빨간색으로, 나머지는 갈색으로 채우려고 한다.
아래 그림은 상근이의 방의 크기가 4×3일 때 이다.
어느 날 상근이네 방에 하근이가 놀러왔다. 하근이는 아름다운 타일 배치에 감동받았다. 다시 방으로 돌아온 하근이는 빨간색과 갈색 타일의 개수는 기억했지만, 방의 크기는 기억해내지 못했다.
빨간색과 갈색 타일의 개수가 주어졌을 때, 상근이 방의 크기를 구하는 프로그램을 작성하시오.
첫째 줄에 빨간색 타일의 수 R과 갈색 타일의 수 B가 주어진다.
(8 ≤ R ≤ 5000, 1 ≤ B ≤ 2,000,000)
첫째 줄에 상근이네 방의 크기 L과 W을 공백으로 구분하여 출력한다. 만약, 두 수가 다르다면, 큰 수가 L이 되고 작은 수가 W이 된다. 항상 정답이 유일한 경우만 입력으로 주어진다.
>>>코드
a, b = map(int, input().split())
for i in range(1, a//2 +2):
if i*(a//2 +2 - i) == a+b:
print(a//2 +2 -i, i)
break
3. 백준 3181 줄임말 만들기
꿍은 만사가 귀찮아서 말을 하기도 귀찮아 한다.
그래서 하려는 말을 대신해줄 줄임말을 만들려고 하는데 나름 규칙을 만들었다.
하려는 말은 최소 하나 이상의 단어를 포함하는데 각 단어들은 정확히 한칸의 공백으로 구분이 된다.
줄임말을 만들때는 각 단어의 앞글자를 따서 만들어지는데 다음의 단어들은 쓸모없는 단어들이므로 무시한다.
'i', 'pa', 'te', 'ni', 'niti', 'a', 'ali', 'nego', 'no', 'ili'.
하지만 이 단어들이 하려는 말의 맨 앞에 올경우 매우 중요하다고 판단되어 무시하면 안되고 줄임말에 포함하여야 한다.
줄임말을 만들기도 귀찮아진 꿍을 위해 줄임말을 만들어주는 프로그램을 작성하라.
단, 줄임말은 모두 대문자로만 이루어져있다.
입력은 유일하게 한 줄만 주어지며 하려는 말이 포함되어 있다.
문장은 알파벳 소문자와 공백으로만 이루어져 있다.
문장의 최대길이는 100이다.
만들어진 줄임말을 출력하라.
>>>코드
l = list(map(str, input().split()))
ll = ['i', 'pa', 'te', 'ni', 'niti', 'a', 'ali', 'nego', 'no', 'ili']
result = [l[0][0].upper()]
for i in range(1, len(l)):
if l[i] not in ll:
result.append(l[i][0].upper())
print(''.join(result))
그냥 del함수를 사용해보려고 했으나 그려면 반복시에 리스트의 요소가 삭제되면서 index error가 발생했기에 새로운 리스트를 생성하여 저장해주었다.