[グリディ]白駿2810杯グラスグラスグラス
質問リンク
https://www.acmicpc.net/problem/2810
映画館には硬座とカップル席が並んでいて、硬座のコップは両側に架かっていて、カップル席の2つの位置の間にはコップ棚がありません.
ハードシート
カップル座:LL
カップハンドル:*
普通席はこんな感じです.
このような違いのため、すべての人がカップを使用できない可能性があります.LLLの例では4人いますが、カップは*LL*LL*で、3つあります.
このように一列の座席情報を入力すれば、カップを使った最大人数を得ることができます.
質問を見ると、SとLLの数によって、コップを使える人の数が規則正しいと思うので、いくつか例を挙げました.
SSSSの場合は全員利用可能なので、座席の数が正解です.
LLLの場合は3つのカップがあり、LLLの場合は4つが正解です.このルールに従って、LLをペアとした場合、LLの個数+1が正解となります.
以上の結果から、SとLLが混在している場合にもこのルールが適用されるかどうかを確認するため、LLLS、SLLLLSSLなどの例で計算した場合も同様に適用されるため、コードに適用することにした.
これは初めて作成したコードです.
注意すべきは、LLがない場合、ansにcountLについての演算を入れるべきではないことです.それを考えなければ、いつもans+=int(countL/2)+1を加えると、96%の点数がいつも間違っていて、私は怒っています.
理由は簡単だ.入力
1
S
もしそうであればcounts:1,countl:0は既に加入しているはずですが、ansにint(countl/2)+1を加えた瞬間、0/2+1が増えるので、LLがなくてもLLに関する演算が加わることになります.したがって、countlが0より大きい場合にのみansに追加されます.
Pythonに精通している人なら、そのコードが不便だと感じるかもしれません.理由は文字列を処理する方法で、javaではこのように文字列を処理しているので、この方法以外は考えられませんでした.問題を解いて他人のコードを盗み見し、Pythonには非常に便利な文字列関連関数が内蔵されている.
直接文字列.count()関数です.たとえば、上のコードでfor文を回転させる必要はありません.Seats.count(「LL」)を使用すると、「LL」がSeats文字列で何回使用されたかを返す関数です.したがって,より簡単なコードを記述した.
この時間はPythonの魅力を感じることができ、文字列管理と簡潔なコード構成を容易に行うことができます.
https://www.acmicpc.net/problem/2810
1.問題の解釈
映画館には硬座とカップル席が並んでいて、硬座のコップは両側に架かっていて、カップル席の2つの位置の間にはコップ棚がありません.
ハードシート
カップル座:LL
カップハンドル:*
普通席はこんな感じです.
このような違いのため、すべての人がカップを使用できない可能性があります.LLLの例では4人いますが、カップは*LL*LL*で、3つあります.
このように一列の座席情報を入力すれば、カップを使った最大人数を得ることができます.
2.問題を解く
質問を見ると、SとLLの数によって、コップを使える人の数が規則正しいと思うので、いくつか例を挙げました.
SSSSの場合は全員利用可能なので、座席の数が正解です.
LLLの場合は3つのカップがあり、LLLの場合は4つが正解です.このルールに従って、LLをペアとした場合、LLの個数+1が正解となります.
以上の結果から、SとLLが混在している場合にもこのルールが適用されるかどうかを確認するため、LLLS、SLLLLSSLなどの例で計算した場合も同様に適用されるため、コードに適用することにした.
これは初めて作成したコードです.
N = int(input())
Seats = input()
countS = 0
countL = 0
ans = 0
for i in range(0, N):
# 좌석 정보 카운트
if Seats[i] == 'S':
countS += 1
else:
countL += 1
# 커플석이 있을 때에만
if countL > 0:
ans += int(countL/2) + 1
ans += countS
print(ans)
seats変数に座席情報を含め,ゼロインデックスから順に文字列を確認しcount変数に分割する.したがって,Sの個数とLの個数は,発見された規則はLの個数に関連しているので,Lの個数の半分を用いて,+1を用いる.注意すべきは、LLがない場合、ansにcountLについての演算を入れるべきではないことです.それを考えなければ、いつもans+=int(countL/2)+1を加えると、96%の点数がいつも間違っていて、私は怒っています.
理由は簡単だ.入力
1
S
もしそうであればcounts:1,countl:0は既に加入しているはずですが、ansにint(countl/2)+1を加えた瞬間、0/2+1が増えるので、LLがなくてもLLに関する演算が加わることになります.したがって、countlが0より大きい場合にのみansに追加されます.
Pythonに精通している人なら、そのコードが不便だと感じるかもしれません.理由は文字列を処理する方法で、javaではこのように文字列を処理しているので、この方法以外は考えられませんでした.問題を解いて他人のコードを盗み見し、Pythonには非常に便利な文字列関連関数が内蔵されている.
直接文字列.count()関数です.たとえば、上のコードでfor文を回転させる必要はありません.Seats.count(「LL」)を使用すると、「LL」がSeats文字列で何回使用されたかを返す関数です.したがって,より簡単なコードを記述した.
N = input()
Seats = input()
ans = 0
# 좌석 정보 카운트
countL = Seats.count('LL')
countS = Seats.count('S')
# 커플석이 있을 때에만
if countL > 0:
ans += countL+1
ans += countS
print(ans)
このように文を繰り返すことなく、より簡単で見栄えの良いコードを書いてみましょう.この時間はPythonの魅力を感じることができ、文字列管理と簡潔なコード構成を容易に行うことができます.
Reference
この問題について([グリディ]白駿2810杯グラスグラスグラス), 我々は、より多くの情報をここで見つけました https://velog.io/@sqk8657/그리디백준-2810-컵홀더-파이썬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol