문제
이번에 새롭게 드럼을 배우고 있는 영현이에게 문제가 하나 생겼다. 그것은 바로 박자가 생명인 드럼이지만, 영현이는 심각한 박치라는 것이다.
왼손과 오른손이 서로 다른 박자로 드럼을 연주하는 경우가 있다. 한 박자 동안 왼손이 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))) # 연주 순서를 문자열로 변환하여 출력
*정리
수학 문제는 문제에서 주어진 입력값들의 관계를 파악하는 것이 중요하다
'코딩테스트 > 백준' 카테고리의 다른 글
24. 백준 1039 (골드2) : 교환_ python풀이 / BFS (6) | 2024.10.10 |
---|---|
23. 백준 1781 (골드2) : 컵라면_ python풀이 / 그리드(우선순위큐) (2) | 2024.09.30 |
21. 백준 2470 (골드5) : 두 용액 _ python풀이 / 정렬 (0) | 2024.09.08 |
20. 백준 1904 (실버3) : 01타일 _ python풀이 / DP (0) | 2024.09.03 |
19. 백준 11401 (골드1) : 이항계수3 _ python풀이 / 수학,페르마의소정리 (1) | 2024.09.02 |