[プログラマー]Programmers 2020 KaKako Internジュエリーショッピングパイソン


#質問元


https://programmers.co.kr/learn/courses/30/lessons/67258

#解答1

def solution(gems):
    set_gem = set(gems)
    length = len(set_gem)
    gnqh = []
    dict1 = dict()
    for i in range(len(gems)):
        try:
            del dict1[gems[i]]
        except:
            pass
    
        dict1[gems[i]] = i

        if len(dict1) == length:
            vl = list(dict1.values())
            if vl[-1] == vl[0]:
                return vl[0]+1, vl[-1]+1
            else:
                gnqh.append([vl[-1]-vl[0], vl[0]+1, vl[-1]+1])
    gnqh.sort()
    return gnqh[0][1], gnqh[0][2]


#print( solution(["DIA", "RUBY", "RUBY", "RUBY", "RUBY", "EMERALD", "SAPPHIRE", "DIA"]) )
#print( solution(["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"]) )
# print( solution(["AA", "AB", "AC", "AA", "AC"]) )
# print( solution(["XYZ", "XYZ", "XYZ"]) )
# print( solution(["ZZZ", "YYY", "NNNN", "YYY", "BBB"]) )코드를 입력하세요
正確性はすべて通過する
15番testcaseだけは通過できません.(合計95.6点)

#解答2

from collections import defaultdict
def solution(gems):
    set_gem = set(gems)
    length = len(set_gem)
    dict1 = defaultdict(int)
    a1, a2 = 0, 999999999
    for i in range(len(gems)):

        if dict1[gems[i]] != 0:
            del dict1[gems[i]]
            dict1[gems[i]] = i + 1
        else:
            dict1[gems[i]] = i + 1

        if len(dict1) == length:
            vl = list(dict1.values())
            if vl[-1] == vl[0]:
                return vl[0], vl[-1]
            else:
                if a2-a1 > vl[-1]-vl[0]:
                    a1 = vl[0]
                    a2 = vl[-1]

    return a1,a2
    
#print( solution(["DIA", "RUBY", "RUBY", "RUBY", "RUBY", "EMERALD", "SAPPHIRE", "DIA"]) )
#print( solution(["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"]) )
# print( solution(["AA", "AB", "AC", "AA", "AC"]) )
# print( solution(["XYZ", "XYZ", "XYZ"]) )
# print( solution(["ZZZ", "YYY", "NNNN", "YYY", "BBB"]) )
精度と効率はいずれも通過(100点)

# review


効率を高めるために、私たちは時間を短縮する方法を考えています.その結果、以下の3つの項目を修正しました.結果は100点
  • try - except -> if else문
  • 普通dict->defaultdict(int)//try문使用しないため
  • 完了
  • gnph(후보리스트)for문後にリストソートを行うよりも、for文内a1,a2更新方向.