알고리즘
-
[백준 / Python] 5052번 전화번호 목록 | 초코더알고리즘/백준 2020. 1. 14. 00:14
https://www.acmicpc.net/problem/5052 5052번: 전화번호 목록 문제 전화번호 목록이 주어진다. 이때, 이 목록이 일관성이 있는지 없는지를 구하는 프로그램을 작성하시오. 전화번호 목록이 일관성을 유지하려면, 한 번호가 다른 번호의 접두어인 경우가 없어야 한다. 예를 들어, 전화번호 목록이 아래와 같은 경우를 생각해보자 긴급전화: 911 상근: 97 625 999 선영: 91 12 54 26 이 경우에 선영이에게 전화를 걸 수 있는 방법이 없다. 전화기를 들고 선영이 번호의 처음 세 자리를 누르는 순간 바로 긴급전화가 www.acmicpc.net 접근법 numbers배열에 전화번호 목록을 입력받아옵니다. 그리고 정렬시킵니다. 문자열을 정렬시키면 ['911', '97625999'..
-
[백준 / Python] 3047번 ABC | 초코더알고리즘/백준 2020. 1. 13. 18:04
https://www.acmicpc.net/problem/3047 3047번: ABC 문제 세 수 A, B, C가 주어진다. A는 B보다 작고, B는 C보다 작다. 세 수 A, B, C가 주어졌을 때, 입력에서 주어진 순서대로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 세 수 A, B, C가 주어진다. 하지만, 순서는 A, B, C가 아닐 수도 있다. 세 수는 100보다 작거나 같은 자연수이다. 둘째 줄에는 A, B, C로 이루어진 세 글자가 주어지며, 이 순서대로 출력하면 된다. 출력 주어진 세 수를 주어진 출력 순서대로 출력하면 www.acmicpc.net 접근법 입력받은 숫자는 nums라는 리스트로 저장하고, 입력받은 문자열은 strs라는 변수에 저장합니다. nums를 정렬합니다. 그리고 st..
-
[백준 / Python] 10825번 국영수 | 초코더알고리즘/백준 2020. 1. 13. 17:51
https://www.acmicpc.net/problem/10825 10825번: 국영수 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다. 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다. www.acmicpc.net 접근법 sort()와 lambda를 이용해서 정렬시킨다는 것이 포인트였습니다. 그런데 국어점수와 수학점수는 높은순대로 정렬시켜야해서 reverse=True를 사용해주어야 하는가 했는데, 정렬조건이 여러개일때는 사용이 불가하였습니다. 어차피 모두 정수이므로 '-'만 붙..
-
[백준 / Python] 11004번 K번째 수 | 초코더알고리즘/백준 2020. 1. 13. 17:01
https://www.acmicpc.net/problem/11004 11004번: K번째 수 수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 접근법 n과 k를 입력받은 후, 정수들을 numbers에 저장합니다. numbers를 정렬시킨뒤, numbers[k-1]번째수를 출력시킵니다. K번째 수는 인덱스로 치면 [K-1]이기 때문 나의 풀이 n,k=map(int,input().split()) numbers=list(map(int,input().split())) numbers.sort() print(numbers[k-1])
-
[백준 / Python] 1026번 보물 | 초코더알고리즘/백준 2020. 1. 13. 16:27
https://www.acmicpc.net/problem/1026 1026번: 보물 첫째 줄에 N이 주어진다. 둘째 줄에는 A에 있는 N개의 수가 순서대로 주어지고, 셋째 줄에는 B에 있는 수가 순서대로 주어진다. N은 50보다 작거나 같은 자연수이고, A와 B의 각 원소는 100보다 작거나 같은 음이 아닌 정수이다. www.acmicpc.net 접근법 A배열을 큰순서로 정렬하고, B배열을 작은순으로 정렬하여 곱해주었을때 합이 가장 작게 나옵니다. 저는 이 문제를 풀때 어떻게 푸는지 방법보다 입력받아오는 것에서 많이 헷갈렸기 때문에 이부분을 좀 정리해보겠습니다. 입력부분 제가 첨에는 for _ in range(N) 반복문안에다가 a.append(list(map(int,input().split())))을 ..
-
[백준 / Python] 2108번 통계학 | 초코더알고리즘/백준 2020. 1. 13. 01:42
https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 접근법 산술평균과 중앙값, 범위은 구하는 법이 매우 간단했습니다. round()함수로 반올림을 해주고, 평균을 구해주면 됩니다. 만약 원소의 갯수가 짝수개라면 중간값 두개의 산술평균을 구해주면 됩니다. 범위는 max()와 min()을 통해 구함 최빈값이 조금 복잡했습니다. 우선 Counter의 most_common()이라는 함수를 이용하면 최빈값을 바로 찾을 수 있었습니다. most_common(2)를 해주어서 최빈값 2개를 찾아준..
-
[백준 / Python] 1181번 단어 정렬 | 초코더알고리즘/백준 2020. 1. 12. 23:53
https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net 접근법 N번만큼 반복문을 돌려서 단어들을 list형태로 words에 저장해줍니다. words를 정렬해주는데, 1.길이순으로 2.사전순으로 정렬해줍니다. 그런다음 같은 단어가 있다면 제거하고 출력해주어야하는데 처음엔 set()함수를 써서 제거하려다가 계속 오류가 나서 이방법을 사용했습니다. 1. 빈 리스트 result를 하나 만들어줌. 2. words에 있는 원소 중 result에 없는 원소만 ..
-
[백준 / Python] 11650번 좌표 정렬하기 | 초코더알고리즘/백준 2020. 1. 12. 23:19
https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다. www.acmicpc.net 접근법 N개만큼 반복문으로 입력을 받아오는데, 공백기준이므로 split()함수 / 정수 형태로 바꿔주어야 하므로 map(int, )함수/ 리스트형태로 저장해주어야 하므로 list()함수를 씀. 그리고 key = lambda x : (x[0],x[1]) 은 x[0]을(x좌표) 기준으로 정렬하는데 같을경우는 x[1]을(y좌표)를 기준으로 정렬 나의..