[python/アルゴリズム]プログラマーKAKAO BLIND RECRUIMENT第1ラウンドダーツゲーム
質問する
https://programmers.co.kr/learn/courses/30/lessons/17682
入力フォーマット
「スコア|加算|オプション」からなる文字列3組.
例)1 S 2 D*3 T
に答える
一番大切な部分は?🤔
この問題を解くとき、一番大切な部分は文字列を区切ることだと思います!!
文字列3集は何の基準もなく書かれているので、簡単にsplitに分けることもできないので、解答の最大比重を占めているのではないかと思います.
実は私はここで最も多くぶらぶらしています!!ははは
Pythonの正規表現
正規表現は一連の規則を利用する.
複雑な文字列の検索と置換にはPythonだけでなく文字列を扱うすべての場所で使用されます.
この問題は、点数(数字)|加点(3文字)|オプション(2文字)の形で繰り返される文字列も使用されるので、正規表現を使用するのに適しています!
正規表現は、詳細に記載されたブログを参照する.import re
p = re.compile('(\d*)([SDT])([*#]?)')
result = p.findall(dartResult)
reモジュールのcompile関数により,正規表現のモードオブジェクトを得ることができる.このオブジェクトでは、文字列を一致させて、必要なフォーマットの文字列を得ることができます.
モードオブジェクトをpという変数に含め、一致するすべての関数を検索することで、3つの文字列を分離できます.🥳
現在、ダーツゲームを3回分離した結果、点数の計算しか残っていません.
まず共通の計算過程を解決しなければならない.
これはディックの資料構造とともに使われている.キー値を文字に置くことで、対応する文字であればボーナスがもらえ、コードの効率が向上します.
通常、
import re
p = re.compile('(\d*)([SDT])([*#]?)')
result = p.findall(dartResult)
最終コードは次のとおりです.
import re
def solution(dartResult):
score = []
# 라운드마다 점수 나누기 -> 정규표현식 사용
p = re.compile('(\d*)([SDT])([*#]?)')
result = p.findall(dartResult)
bonus = {'S': 1, 'D': 2, 'T': 3}
options = {'': 1, '*': 2, '#': -1}
for i, res in enumerate(result):
if i>0 and res[2] == '*':
score[i-1] = score[i-1]*options[res[2]]
score.append(int(res[0])**bonus[res[1]]*options[res[2]])
return sum(score)
スコアを表す変数は、次の理由で各機会にスコアを入力するためにリストを使用します.前述のような特殊な条件があるので、以前の機会に得た点数を利用します.
だから最後にsum関数でリストのすべての要素の値を一緒に渡して、終わりました!
レベル1問題なので難しい問題ではありませんが初めてのKakao問題なので嬉しいです😆
Reference
この問題について([python/アルゴリズム]プログラマーKAKAO BLIND RECRUIMENT第1ラウンドダーツゲーム), 我々は、より多くの情報をここで見つけました https://velog.io/@tnfls99/파이썬-Algorithm-프로그래머스-KAKAO-BLIND-RECRUITMENT-1차-다트게임テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol