알고리즘
-
[백준 / Python] 10814번 나이순 정렬 | 초코더알고리즘/백준 2020. 1. 12. 23:08
https://www.acmicpc.net/problem/10814 10814번: 나이순 정렬 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오. www.acmicpc.net 접근법 data라는 리스트에 공백을 기준으로 한줄씩 입력받아 list형태로 추가합니다. data를 정렬시켜주는데 나이순이 먼저이므로 int(x[0])으로 정수형으로 바꿔준 후 정렬합니다. 나이가 같을 경우는 등록을 먼저한 순으로 출력해야하는데 이건 굳이 정렬을 안해주어도 입력된 순서대로 출력됩니다! 그리고 차례로 출력 나의풀이 N = int(input()) data = [] for i in..
-
[백준 / Python] 11651번 좌표 정렬하기 2 | 초코더알고리즘/백준 2020. 1. 12. 22:03
https://www.acmicpc.net/problem/11651 11651번: 좌표 정렬하기 2 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 접근법 N번 반복해서 숫자를 입력받는데, split()은 공백을 기준으로 숫자를 입력받는 것입니다. 그럼 i가 0일때는 0과 4가 입력되어지는데 이것을 map함수를 이용해 숫자형태로 바꿔준 후 리스트에 저장합니다. numbers안에 숫자를 sort()함수로 정렬하는데 lambda함수를 이용해서 y좌표순으로, 같다면 x좌표순으로 정렬합니다. ..
-
[프로그래머스 / Python] 가장 큰 수 | 초코더알고리즘/프로그래머스 2020. 1. 9. 17:20
문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 -numbers의 길이는 1 이상 100,000 이하입니다. -numbers의 원소는 0 이상 1,000 이하입니다. -정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 numbers return [6, 1..
-
[정렬 알고리즘 / Python] 선택 정렬 | 초코더알고리즘/알고리즘 개념 2020. 1. 9. 16:57
정렬 알고리즘 개념을 뿌셔볼게요.. 선택정렬(Selection Sort) 주어진 배열에서 최댓값(최솟값)을 찾아 맨 오른쪽(왼쪽)값과 교체한다. 최댓값을 맨 오른쪽으로 보낸다는 점에서 버블정렬과 비슷하지만, 이웃한 두 값을 정렬하는 과정이 없기 때문에 대체로 버블정렬보다 빠르다. 최댓값을 찾아야 하므로 정렬 상태에 관계없이 언제나 O(n2)이다. def swap(x, i, j): x[i], x[j] = x[j], x[i] def selectionSort(x): for size in reversed(range(len(x))): max_i = 0 for i in range(1, 1+size): if x[i] > x[max_i]: max_i = i swap(x, max_i, size)
-
[프로그래머스 / Python] H-Index | 초코더알고리즘/프로그래머스 2020. 1. 9. 16:22
문제 설명 H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h가 이 과학자의 H-Index입니다. 어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요. 제한 사항 -과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다. -논문별 인용 횟수는 0회 이상 10,000회 이하입니다. 입출력 예 citations retur..
-
[프로그래머스 / Python] 콜라츠 추측 | 초코더알고리즘/프로그래머스 2020. 1. 8. 22:31
문제 설명 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요. 단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요. 제한 사항 -입력된 수, num은 1 이상 8000000 미만인 정수입니다. 입출력 ..
-
[프로그래머스 / Python] 최대공약수 최소공배수 | 초코더알고리즘/프로그래머스 2020. 1. 8. 22:17
문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 사항 -행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 입출력 예 n m return 3 12 [3,12] 2 5 [1,10] 입출력 예 설명 입출력 예 #1 위의 설명과 같습니다. 입출력 예 #2 자연수 2와 5의 최대공약수는 1, 최소공배수는 10이므로 [1, 10]을 리턴해야 합니다. 접근법 우선 n의 모든 약수와 m의 모든 약수를 각각의 리스트에 저장해두었습니다. 그리고 n리스트, m리스트에 공통되게 들어있는 값 중 가장 큰수를 최대공약수로 리턴..
-
[프로그래머스 / Python] 하샤드 수 | 초코더알고리즘/프로그래머스 2020. 1. 8. 21:38
문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 사항 -x는 1 이상, 10000 이하인 정수입니다. 입출력 예 arr return 10 true 12 true 11 false 13 false 입출력 예 설명 입출력 예 #1 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. 입출력 예 #2 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다. 입출력 예 #3 11의 모든 자릿수의 ..