본문 바로가기

내일배움 캠프/TIL

코딩테스트 겹치는 선분의 길이

해당 문제를 처음봤을때 바로 든 생각이 dic을 이용해서

주어진 배열을 range를 통해서  0,5 면 그 숫자들을 키값으로 넣고

데이터에는 카운트를 넣어서 문제를 풀려고했었다

for line in lines:
    for length in range(line[0],line[1]+1):
        try:
            dic[length]+=1
        except:
            dic[length]=0

그렇게 해서 나온코드가 바로 이거

처음에는 여기까지했으니까 이제 2인거만 확인을 하면 정답이 나오겠지!? 라는 생각을 하고

for value in dic.values():
    if value > 0:
        answer+=1

해당 코드를 통해서 카운트가 되어있으면 그 값만큼 겹치는 선분을 세라 라는 식으로

코드를 짯지만이렇게되면 겹치게되는 경우 즉 선분이 0,3 하고 3,5 의 경우에는 3에 겹친 판정으로 나오게 되어서

값이 다르게 나왔다 그래서 그다음으로 쓴 방법은

for key,value in dic.items():
    if value > 0 and dic.get(key+1,0)>0:
        answer+=1

를 통해서 딕셔너리의 다음값도 카운트가 되어있어야만 +1을해라 라는 방식으로 문제를 해결하려고 했지만,,,,

계속 문제가 발생했다

 

그래서 머리를 아무리 쥐어짜도 해결이 안되서 오전에 푸는것을 포기하고 오후에 다시 도전을 했는데

처음에 for 문을 통해서 길이를 지정할때 range에 +1 을 해서 모든 시작값과 끝값을 모두 찍는게아니라

range까지만해서 실제 길이의 -1 의값만큼만 찍히게 하면

[[0, 2], [-3, -1], [-2, 1]]이런 예제에서는

{0: 1,   1: 0,   -3: 0, -  2: 1,   -1: 0}

기존에 썻던 방식에서는

{0: 1,   1: 1,   2: 0 , -3: 0  , -2: 1,   -1: 1}

이렇게 나와서  값이 2와 4로 차이가 나온다는것을 알게되고 

for문을 통해서 비교하는게 아니라 그냥 값이 1이상이면 answer+=1을해서 정답을 구했습니다