Sort 4

정렬 - 연속된 데이터를 기준에 따라서 정렬하기 위한 알고리즘

정렬(Sorting)이란 ? : 데이터를 측정한 기준에 따라서 순서대로 나열하는 것으로, 프로그램을 작성할 때 가장 많이 사용되는 알고리즘 중 하나다. 정렬 알고리즘은 굉장히 다양한데, 이 중에서 많이 사용하는 정렬은 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 등이 있다. 정렬 알고리즘을 잘 공부하면, 알고리즘의 효율을 높일 수 있다. 또한, 코딩 테스트에서의 정렬 알고리즘 문제는 어느 정도 정해진 답이 있어서, 외워서 잘 풀어낼 수 있는 문제라고도 할 수 있다. 오름차순을 기준으로 각 정렬을 살펴보자. 선택 정렬(Selection Sort) : 데이터가 무작위로 있을 때, 그 중 가장 작은 값을 선택해 맨 앞에 있는 값과 바꾸고, 그 다음 작은 값을 선택해 앞에서 두 번째 값과 바꾸는 과정을 계속 ..

시간과 메모리 측정

코딩 테스트 문제를 풀 때, 시간과 메모리를 측정하는 방법을 알아보자! 파이썬에서는 프로그램 수행 시간과 메모리 사용량을 측정할 수 있다. 문제를 풀면서, 자신이 제대로 알고리즘을 작성하고 있는지 알아야 하기 때문이다. 몇몇 기업은 코딩 테스트를 볼 때, 제출 횟수를 제한 하기 때문에 시간과 메모리를 중간에 체크하는 법을 알면 문제를 옳은 알고리즘으로 풀었는지 미리 알 수 있을 것이다. 아래는 특정한 프로그램의 수행 시간을 측정하는 소스코이다. import time start_time = time.time() # 측정 시작 # 프로그램 소스코드 ~~~~ end_time = time.time() # 측정 종료 print("time : ", end_time - start_time) # 수행시간 출력 예를 들..

[백준/알고리즘/python/java] 18870번 - 좌표 압축

이 문제도 처음에 시간제한에 걸려서 시간초과가 났었던 문제이다. 로직은 간단한데, 시간초과가 났다면, 분명 어떤 라이브러리를 사용하는 것이거나 더 효율적인 자료구조가 있는 것이다. 방법을 고수하지말고 바꿔야 하는 것을 명심하자. 문제마다 어떤 자료구조로 풀어야 효과적인지 판단하는 것도 중요한 것 같다. 맨 처음 풀었던 코드는 아래와 같다. import sys input = sys.stdin.readline N = int(input()) number_list = [int(num) for num in input().split()] sorted_number_list = sorted(number_list) for i in number_list: order = 0 seen = -1 for j in sorted_n..

[백준/알고리즘/python/java] 1015번 - 수열 정렬

맨 처음에, 솔직히 문제가 잘 이해가 가지 않았다. 일단 예제 입력을 그대로 문제에 적용해보면, 입력으로 주어진 배열 A의 원소 2 3 1 은 아래와 같이 표현할 수 있다. B[P[0]] = A[0]->B[1] = 2 B[P[1]] = A[1]->B[2] = 3 B[P[2]] = A[2]->B[0] = 1 다시한번, 문제를 잘 읽어보면, 여기서 B배열은 A배열의 비내림차순 배열이라는 것을 알 수 있었다. 우리는 A배열로부터 B배열을 만들었는데, 그럼 자연스럽게 P배열은 A배열의 원소 크기 순이라는 것을 알 수 있다. 여기서 만약, 동일한 크기의 원소라면, 앞서 있는 것을 먼저 출력하면 된다. 예를 들어 A 배열이 1 3 2 2 라고 하면 P배열은 0 3 1 2 순으로 출력 될 것이다. 작성한 코드는 아래..

반응형