[Silver V] 돌려 돌려 돌림판! - 11504
문제설명
먹고또자니 <거기 누구세요> 코너에서는 "돌림판"을 돌려 상품을 얻을 수 있다. 이 돌림판은 큰 원형판이 N등분되어있는 형태이다.
N등분 된 각 부분은 0부터 9사이의 숫자가 하나씩 적혀있다. 게임이 시작되면, 임의의 M자리의 수 X와 Y(X ≤ Y)가 주어진다. (단, 이 수는 0으로 시작될 수도 있다.)
그리고 참가자는 돌림판을 힘차게 돌린다. 힘차게 돌던 돌림판이 완전히 멈추게 되는 순간, 12시 방향의 스피너가 특정 부분을 가리키게 될 것이다. 거기서부터 시계방향으로 M칸 연속되는 수를 읽으면 M자리의 수 Z를 얻을 수 있다.
이때 얻은 Z가 X ≤ Z ≤ Y를 만족한다면 게임을 승리하고 Z만원을 얻을 수 있다!

예를 들어, 돌림판이 N = 8 등분되어있고, 시계방향으로 읽었을 때 [3, 7, 8, 3, 1, 9, 2, 7] 과 같다고 하자. X = 200 이고 Y = 311일 경우 "숫자 2"가 적힌 부분부터 시작한다면 Z = 273 으로 X = 200 ≤ 273 ≤ 311 = Y 를 만족하여 게임을 승리한다.
돌림판의 상태와 X, Y가 주어질 때 어느 부분부터 시작하면 게임을 승리할 수 있을 지 알 수 있다. 주어진 조건에 대해서 게임을 승리할 수 있는 가지수를 계산하는 프로그램을 작성하시오.
입력
첫 번째 줄에 테스트케이스의 개수 T가 주어진다.
각 테스트케이스의 첫 줄에는 돌림판을 N등분할 정수 N (1 ≤ N ≤ 100)과 X, Y의 길이 M (1 ≤ M ≤ 9, M ≤ N) 이 주어진다. 그리고 다음 3개의 줄에 X의 각 자리수, Y의 각 자리수, 돌림판의 상태가 주어진다.
X와 Y의 각 자리수는 공백으로 구분되어 0~9사이의 숫자가 한자리씩 주어진다.
돌림판의 상태는 어느 부분부터 시계방향으로 읽었을 때 나타나는 순서대로 주어진다. 돌림판의 숫자도 0~9사이의 숫자가 공백으로 구분되어 주어진다.
출력
각 테스트케이스에 대하여 한 줄씩 정답을 출력한다.
즉, 돌림판에서 X ≤ Z ≤ Y를 만족하는 M자리의 수 Z가 몇 개가 있는 지를 출력한다. 단, 같은 수라도 시작 부분이 다르다면 다른 가지수로 센다. 예를 들어, X와 Y 사이에 있는 수가 123 밖에 없는 데 돌림판에서 2번 나온다면, 1이 아닌 2를 출력한다.
예제입력 / 예제출력

문제이해 및 코드설명
구현&시뮬레이터 문제 중 난이도가 다소 쉬운문제.
X,Y를 입력받은 후 길이 M자리의 수에서 X와 Y사이의 몇개의 수가 있는지 돌림판에서 개수를 찾는문제이다.
마지막이나 마지막 전에숫자부터 시작해서 다시 처음으로 돌아오는 경우의수를 어떻게 처리하는 점이 포인트이다.
join함수를 사용해서 2 0 0 이런식으로 나온 수를 200으로 합친점도 이 문제의 포인트이다.
처음봤을때는 어려워보였는데 펜과노트에 하나씩 적으면서 풀어보니 생각보다 간단했던 문제였다.
코드
import sys
# 테스트케이스 T , 돌림판등분 N , XY길이 M, X,Y
T = int(sys.stdin.readline())
# T개수만큼 반복, new_clrcle 리스트 새로작성(가능한 모든 경우를 담음)
for _ in range(T):
N,M = map(int,sys.stdin.readline().split())
X = int(''.join(sys.stdin.readline().split()))
Y = int(''.join(sys.stdin.readline().split()))
circle = list(sys.stdin.readline().split())
new_circle = circle + circle[:M-1]
cnt = 0
temp = 0
# M개씩 자른부분을 temp로 입력하고 조건만족시 cnt세줌
for i in range(N):
temp = int(''.join(new_circle[i:i+M]))
if X <= temp <= Y:
cnt +=1
print(cnt)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 단어 정렬 1181(Python) (0) | 2023.03.01 |
---|---|
백준 - 접미사 배열 11656 (Python) (0) | 2023.02.28 |
백준 - 경로 찾기 11403(Python) (0) | 2023.02.28 |
백준 ATM 11399 (Python) (0) | 2023.02.28 |
백준 - 사탕 11256(Python) (0) | 2023.02.28 |
[Silver V] 돌려 돌려 돌림판! - 11504
문제설명
먹고또자니 <거기 누구세요> 코너에서는 "돌림판"을 돌려 상품을 얻을 수 있다. 이 돌림판은 큰 원형판이 N등분되어있는 형태이다.
N등분 된 각 부분은 0부터 9사이의 숫자가 하나씩 적혀있다. 게임이 시작되면, 임의의 M자리의 수 X와 Y(X ≤ Y)가 주어진다. (단, 이 수는 0으로 시작될 수도 있다.)
그리고 참가자는 돌림판을 힘차게 돌린다. 힘차게 돌던 돌림판이 완전히 멈추게 되는 순간, 12시 방향의 스피너가 특정 부분을 가리키게 될 것이다. 거기서부터 시계방향으로 M칸 연속되는 수를 읽으면 M자리의 수 Z를 얻을 수 있다.
이때 얻은 Z가 X ≤ Z ≤ Y를 만족한다면 게임을 승리하고 Z만원을 얻을 수 있다!

예를 들어, 돌림판이 N = 8 등분되어있고, 시계방향으로 읽었을 때 [3, 7, 8, 3, 1, 9, 2, 7] 과 같다고 하자. X = 200 이고 Y = 311일 경우 "숫자 2"가 적힌 부분부터 시작한다면 Z = 273 으로 X = 200 ≤ 273 ≤ 311 = Y 를 만족하여 게임을 승리한다.
돌림판의 상태와 X, Y가 주어질 때 어느 부분부터 시작하면 게임을 승리할 수 있을 지 알 수 있다. 주어진 조건에 대해서 게임을 승리할 수 있는 가지수를 계산하는 프로그램을 작성하시오.
입력
첫 번째 줄에 테스트케이스의 개수 T가 주어진다.
각 테스트케이스의 첫 줄에는 돌림판을 N등분할 정수 N (1 ≤ N ≤ 100)과 X, Y의 길이 M (1 ≤ M ≤ 9, M ≤ N) 이 주어진다. 그리고 다음 3개의 줄에 X의 각 자리수, Y의 각 자리수, 돌림판의 상태가 주어진다.
X와 Y의 각 자리수는 공백으로 구분되어 0~9사이의 숫자가 한자리씩 주어진다.
돌림판의 상태는 어느 부분부터 시계방향으로 읽었을 때 나타나는 순서대로 주어진다. 돌림판의 숫자도 0~9사이의 숫자가 공백으로 구분되어 주어진다.
출력
각 테스트케이스에 대하여 한 줄씩 정답을 출력한다.
즉, 돌림판에서 X ≤ Z ≤ Y를 만족하는 M자리의 수 Z가 몇 개가 있는 지를 출력한다. 단, 같은 수라도 시작 부분이 다르다면 다른 가지수로 센다. 예를 들어, X와 Y 사이에 있는 수가 123 밖에 없는 데 돌림판에서 2번 나온다면, 1이 아닌 2를 출력한다.
예제입력 / 예제출력

문제이해 및 코드설명
구현&시뮬레이터 문제 중 난이도가 다소 쉬운문제.
X,Y를 입력받은 후 길이 M자리의 수에서 X와 Y사이의 몇개의 수가 있는지 돌림판에서 개수를 찾는문제이다.
마지막이나 마지막 전에숫자부터 시작해서 다시 처음으로 돌아오는 경우의수를 어떻게 처리하는 점이 포인트이다.
join함수를 사용해서 2 0 0 이런식으로 나온 수를 200으로 합친점도 이 문제의 포인트이다.
처음봤을때는 어려워보였는데 펜과노트에 하나씩 적으면서 풀어보니 생각보다 간단했던 문제였다.
코드
import sys
# 테스트케이스 T , 돌림판등분 N , XY길이 M, X,Y
T = int(sys.stdin.readline())
# T개수만큼 반복, new_clrcle 리스트 새로작성(가능한 모든 경우를 담음)
for _ in range(T):
N,M = map(int,sys.stdin.readline().split())
X = int(''.join(sys.stdin.readline().split()))
Y = int(''.join(sys.stdin.readline().split()))
circle = list(sys.stdin.readline().split())
new_circle = circle + circle[:M-1]
cnt = 0
temp = 0
# M개씩 자른부분을 temp로 입력하고 조건만족시 cnt세줌
for i in range(N):
temp = int(''.join(new_circle[i:i+M]))
if X <= temp <= Y:
cnt +=1
print(cnt)
'알고리즘 문제풀이' 카테고리의 다른 글
백준 - 단어 정렬 1181(Python) (0) | 2023.03.01 |
---|---|
백준 - 접미사 배열 11656 (Python) (0) | 2023.02.28 |
백준 - 경로 찾기 11403(Python) (0) | 2023.02.28 |
백준 ATM 11399 (Python) (0) | 2023.02.28 |
백준 - 사탕 11256(Python) (0) | 2023.02.28 |