문제

https://www.acmicpc.net/problem/11650

걸린 시간

00 : 47 : 38

풀이

Python3

if __name__ == "__main__":
    # 점의 개수    
    N = int(input())

    loc = []

    for i in range(0, N):
        temp = list(map(int, input().split()))
        loc.append(temp)

    loc.sort()        

    # 다음 값을 탐색하기 위한 count 변수
    count = 1

    for x in range(0, len(loc)):
        if count > 1:
            count -= 1
        else:
            # y 값을 기준으로 정렬하기 위한 임시 리스트
            tmp = []

            # 1. 점의 x 좌표를 가져온다.
            pointX = loc[x][0]

            tmp.append(loc[x])

            # 2. 계속해서 다음 값을 확인한다.
            while True:
                # 다음 인덱스가 범위 밖이면 break
                if x+count > len(loc)-1:
                    break
                nextX = loc[x+count][0]
                # 다음 값이 같다면 count를 1증가, 정렬할 리스트에 보관
                if pointX == nextX:
                    tmp.append(loc[x+count])
                    count += 1
                # 다음 값이 다르면 break
                else:
                    break

            # 3. 정렬해서 다시 대입한다.
            tmp = sorted(tmp, key = lambda x : x[1])
            c = 0
            for i in range(x, x+count):
                loc[i] = tmp[c]
                c += 1

    for i in range(0, len(loc)):
        print(loc[i][0], loc[i][1])

통과는 했지만 기존 알고리즘에서 중복된 y값 정렬을 제거해보고자 추가적으로 if 문을 하나 더 두었는데 오히려 실행시간이 아주 조금 더 늘었다. 왜일까?

'Baekjoon' 카테고리의 다른 글

Baekjoon 2164번 카드2  (0) 2020.07.25
Baekjoon 2609번 최대공약수와 최소공배수  (0) 2020.07.25
Baekjoon 1920번 수 찾기  (0) 2020.07.23
Baekjoon 1018번 체스판 다시 칠하기  (0) 2020.07.23
Baekjoon 1929번 소수 구하기  (0) 2020.07.23

댓글