본문 바로가기

코딩테스트/백준

22. 백준 30890 (실버4) : 드럼_ python풀이 / 수학(최소공배수)

 

문제

이번에 새롭게 드럼을 배우고 있는 영현이에게 문제가 하나 생겼다. 그것은 바로 박자가 생명인 드럼이지만, 영현이는 심각한 박치라는 것이다.

왼손과 오른손이 서로 다른 박자로 드럼을 연주하는 경우가 있다. 한 박자 동안 왼손이 X번, 오른손이 Y번 연주를 해야 한다면 왼손은 1/X박자마다, 오른손은 1/Y박자마다 연주한다. X=2, Y=3이면 그림과 같이 (오른손) / (왼손) / (오른손) / (왼손 + 오른손) 순으로 연주해야 한다.

영현이는 이러한 상황을 만나면 심각한 연주 불능 상태에 빠지고 만다. 불쌍한 영현이를 위해 어떤 순서로 드럼을 연주해야 하는지 알려주자.

입력

한 박자 동안 왼손이 연주해야 하는 횟수 X와 오른손이 연주해야 하는 횟수 Y가 주어진다. (1≤X,Y≤100)

출력

드럼을 연주해야 하는 순서를 출력하자. 왼손만 연주하는 경우는 1, 오른손만 연주하는 경우는 2, 양손 모두 연주하는 경우는 3으로 한다.

예제 입력 1 복사

2 3

예제 출력 1 복사

2123

예제 입력 2 복사

4 2

예제 출력 2 복사

1313

*문제해석

한 박자동안 왼손이 연주해야 하는 횟수를 a, 오른손 연주 횟수를 b라고 하면 어떤 경우든 마지막에는 둘 다 한꺼번에 연주하게 된다. 이는 결국 a와 b의 최소공배수가 한 박자의 끝이라고 봐도 좋을 것이다.

 

1부터 a와b의 최소공배수까지 a로 나눠지면 1, b로 나눠지면 2, a와b로 동시에 나눠지면 3을 출력하면 된다.

 

*나의코드

a,b = map(int,input().split())  
result = []

for i in range(1,a*b+1):  # 1부터 a와 b의 최소공배수까지 반복
    if not(i%b) and not(i%a):  #양손연주 _ 3
        result.append(3)
    elif not(i%a) :  # 오른손 연주 _ 2
        result.append(2)
    elif not(i%b) :  # 왼손 연주 _ 1
        result.append(1)    

print("".join(map(str,result)))  # 연주 순서를 문자열로 변환하여 출력

 

*정리

수학 문제는 문제에서 주어진 입력값들의 관계를 파악하는 것이 중요하다