Python을 이용한 30890번 :연산자 끼워넣기에 대해서 포스팅하겠습니다.
30890번 문제설명
- 왼손과 오른손이 서로 다른 박자로 드럼을 연주하는 경우가 있다. 한 박자 동안 왼손이 X번, 오른손이 Y번 연주를 해야 한다면 왼손은 (1/X)박자마다, 오른손은 (1/Y)박자마다 연주한다.
접근방법
1. 최소공배수를 통한 박자
- 왼손이 한 박자를 1/2 박으로 나눠서 치고, 오른손이 한 박자를 1/3 박으로 나눠서 친다고 하였을 때 두 손이 동시에 박자를 맞추는 지점은 두 박자의 최소공배수에 해당합니다.
- 따라서 두 손은 최소공배수의 카운트아래에서 자신의 박자에 맞는 차례에 드럼을 치게 됩니다.
2. 조건문을 통한 박자 판별
- 코드에서는 반복문과 조건문을 사용하여 각 박자마다 어떤 손으로 연주해야 하는지 결정합니다.
- if not(i%b) and not(i%a) 조건은 두 손이 동시에 연주해야 하는 경우를 판별합니다. 이 경우 ‘3’을 결과에 추가합니다.
- elif not(i%a) 조건은 왼손만 연주해야 하는 경우(오른손 연주 시점이 아님)를 판별합니다. 이 경우 ‘2’를 결과에 추가합니다.
- elif not(i%b) 조건은 오른손만 연주해야 하는 경우를 판별합니다. 이 경우 ‘1’을 결과에 추가합니다.
30890번 코드
Python
a,b = map(int,input().split()) # X와 Y 값을 입력받음
result = [] # 연주 순서를 저장할 리스트
for i in range(1,a*b+1) : # 1부터 a와 b의 최소공배수까지 반복
if not(i%b) and not(i%a) : # i가 a와 b 모두의 배수인 경우 (양손으로 연주)
result.append(3)
elif not(i%a) : # i가 a의 배수인 경우 (오른손으로 연주)
result.append(2)
elif not(i%b) : # i가 b의 배수인 경우 (왼손으로 연주)
result.append(1)
print("".join(map(str,result))) # 연주 순서를 문자열로 변환하여 출력