【Python】白俊1193号噴水を探して
質問する
に答える
まず規則性を見てみましょう.
以上のように線分を1本増やすごとに線分内の分数個数は+1の等差数列となる.
また、線は「奇数時左」から、「偶数時右」からカウントを開始します.
5本目の線を例にとるとこのような様子です.
5는 홀수이므로 왼쪽에서 시작하며 (위 그림참조) 5개의 분수를 가지고 있다
1번째 분수 5 / 1
2번째 분수 4 (-1) / 2 (+ 1)
3번째 분수 3 (-1) / 3 (+ 1)
4번째 분수 2 (-1) / 4 (+ 1)
5분째 분수 1 (-1) / 5 (+ 1)
すなわち,xの2番目のスコアを求めるために,どの線上にあるかを決定することから,xを含むn線上に,前の線上に含まれるスコアの数を減算し,残りの数を計算する.例えば、14番目の点数を要求すると
line 1 : 1 count = 1 x -= count (x = 13)
line 2 : 3 2 <- count += 1 x -= count (x = 11)
line 3 : -> 4 5 6 count += 1 x -= count (x = 8)
line 4 : 10 9 8 7 <- count += 1 x -= count (x = 4)
line 5 : -> 11 12 13 14 15 x는 4이고 line이 홀수 이므로 왼쪽에서부터 4번째 분수를 의미한다
私が説明したコード
私が初めて問題を解く方法は
x = int(input())
n = 0 # 라인의수
while x > 0: # x가 포함된 라인찾기
n += 1 # 라인 카운트
x -= n # 카운트한 분수의 갯수 빼기
x *= -1 # 양수로 바꿔주기
if n % 2 == 0: # 라인이 짝수일때 오른쪽에서부터 카운트
for i in range(n): #처음 분수를 짝수이기 떄문에 [n,1] 잡고 카운트 시작
if x == 0: # x의 자리를 찾는다면
print(f'{n - i}/{i + 1}')
break
else:
x -= 1 # x의 자리까지 카운트하기
else: # 라인이 홀수일때 왼쪽에서부터 카운트
for i in range(n): #처음 분수를 홀수이기 떄문에 [1,n] 잡고 카운트 시작
if x == 0:
print(f'{i + 1}/{n - i}')
break
else:
x -= 1
私が最初に説明した方法で白準に提出しても、通過するのは難しくありません.しかし、他人の解題方法を見ると、コードを書くのがもっと簡潔な様子が見えます.
while x > 0:
n += 1
x -= n
このコードwhile x > n:
x -= n
n += 1
このように変更できます.xの位置を−(n−1)~0と考え,以下でxの記号を変えた.
jsshaneのコードは,xの位置がxがnより小さいだけであれば,xの位置を求めるだけでよい.
不思議なことに、計算されたxの値が3で、line(n)が5であれば
5番目の線上で、左から3番目の点数を求めればいいです
if a % 2 == 0:
for i in range(a):
if x == 0:
print(f'{a - i}/{i + 1}')
break
else:
x -= 1
else:
for i in range(a):
if x == 0:
print(f'{i + 1}/{a - i}')
break
else:
x -= 1
このコードはxの位置を計算することもでき、ドアを使わない.たとえば、以前の私のコードはxが13の場合です.
x = 13 -> 12 -> 10 -> 7 -> 3 -> -2 (0부터 계산하므로 3번째에 속한다)
line = 1 -> 2 -> 3 -> 4 -> 5
x 5番目の線の始点から3番目の値を算出する5番目の線は奇数[1,5]->[2,4]->[3,3]で答えが見つかった
if n % 2 == 0:
print(f'{x}/{n - x + 1}')
else:
print(f'{n - x + 1}/{x}')
これは残りのxが得たい値です.x = 13 -> 12 -> 10 -> 7 -> 3
line = 1 -> 2 -> 3 -> 4 -> 5
上記の結果に示すように、第五条線上で第三条に属する値を求めればよい[5, 1][4, 2][3, 3][2, 4][1, 5]
この行は奇数行で、左から3番目の値です.
つまり、[3,3].
x番目のスコアは
lineが偶数の場合[whlie文は前のx値、line-whlie文は前のx値+1]
lineが奇数の場合[line-whlie文は前のx値+1、whlie文は前のx値]
表現できる
新しいコード
x = int(input())
n = 1
while x > n:
x -= n
n += 1
if n % 2 == 0:
print(f'{x}/{n - x + 1}')
else:
print(f'{n - x + 1}/{x}')
これは簡潔で分かりやすいコードになりましたReference
この問題について(【Python】白俊1193号噴水を探して), 我々は、より多くの情報をここで見つけました https://velog.io/@yw22/파이썬-백준-1193번-분수찾기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol