2020 KAKAO BLIND RECRUITMENT Q1. 文字列圧縮
3106 ワード
Q1. 文字列圧縮
1.質問のタイプ
Programmersリンク共有
https://programmers.co.kr/learn/courses/30/lessons/60057
1-1. I/O例
ソースコード
INF = int(1e9)
def solution(s):
answer = INF
if len(s) == 1: # 길이가 1일 때, return 1
return 1
for cutPoint in range(1,len(s)//2+1):
ans = ""
count = 1
tmpStr = s[:cutPoint]
for idx in range(cutPoint,len(s),cutPoint):
if tmpStr == s[idx:idx+cutPoint]:
count += 1
else:
if count == 1:
count = ""
ans += str(count) + tmpStr
tmpStr = s[idx:idx+cutPoint]
count = 1
if count == 1:
count = ""
ans += str(count) + tmpStr
answer = min(answer,len(ans))
return answer
3.問題を解く
この問題は文字列を処理するアルゴリズムであり,文字列を自分の望む状態に切り取ることができるかどうかが鍵となる.
INF = int(1e9)
def solution(s):
answer = INF
if len(s) == 1: # 길이가 1일 때, return 1
return 1
for cutPoint in range(1,len(s)//2+1):
ans = ""
count = 1
tmpStr = s[:cutPoint]
for idx in range(cutPoint,len(s),cutPoint):
if tmpStr == s[idx:idx+cutPoint]:
count += 1
else:
if count == 1:
count = ""
ans += str(count) + tmpStr
tmpStr = s[idx:idx+cutPoint]
count = 1
if count == 1:
count = ""
ans += str(count) + tmpStr
answer = min(answer,len(ans))
return answer
Arr[A:B]>範囲:AからB-1(インデックスベース)
Arr[A:]>範囲:A~終了(インデックスベース)
Arr[:B]>範囲:初期インデックスからB-1インデックス)
3-1. カットポイントの設定
まず、カットされた文字列をいくつか比較するためにcutPointを設定します.
for cutPoint in range(1,len(s)//2+1):
count = 1
ans = ""
tmpStr = s[:cutPoint]
WHY? 半分を超えると圧縮はもう意味がないからだ.
3-2. 比較文法
次に、for文を実装して、3-1から切り取られた文字列(=tmpstr)と比較します.
for idx in range(cutPoint, len(s), cutPoint):
if tmpStr == s[idx:idx+cutPoint]:
count += 1
else:
if count == 1:
count = ""
ans += str(count) + tmpStr
tmpStr = s[idx:idx+cutPoint]
count = 1
for文の値をcutPoint値に増やすことで、同じ長さの文字列を比較できます.標準文字列(=tmpStr)が次の文字列(=s[idx:idx+cutPoint])と同じ場合count+=1
1.同じ値が1つしかない場合は、その値を省略します.
2.ansに現在までの同じ数(=count)+文字列(=tmpstr)を保存
3.tmpStorを新しい文字列として再定義しcount=1
3-3. 最小の長さを求める
3-2が完了したら、for文の値が最小長であるかどうかを比較する必要があります.
if count == 1:
count = ""
ans += str(count) + tmpStr
answer = min(answer, len(ans)
3-2のfor文を脱出した後、同じ文法を再使用する必要がある理由は?上記の手順に従って、既存の答えと現在見つかっている圧縮文字列(=ans)の長さを使用して、より小さな値を置き換えます.
この手順を繰り返すと、答えに最小の圧縮文字列長が格納されます.
4.終了
今日は文字列を処理するアルゴリズムの問題を解いた.Pythonは文字列を扱いやすいので便利ですが、アルゴリズムを考え出すのに時間がかかったようです.
解ければ解けるほど解けるという考え方よりも、なかなか難しいです.ㅠまだ長い道があるでしょう...
もっと忙しく前に进め!
完全なソースGitリンク
https://github.com/cho876/Algorithm/blob/master/Problem/Kakao/2020_kakao_blind_recruitment_q1.py
Reference
この問題について(2020 KAKAO BLIND RECRUITMENT Q1. 文字列圧縮), 我々は、より多くの情報をここで見つけました https://velog.io/@cho876/2020-KAKAO-BLIND-RECRUITMENT-Q1.-문자열-압축テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol