목록BOJ (335)
기록방
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/k5ZtM/btrPzk2sOLw/K6nIJOaQk8Nt8HUA6RHlKk/img.png)
👉 문제링크 11004번: K번째 수 수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 🔸 문제 분석 🔸 입력받은 N개의 수를 오름차순으로 정렬했을때 K번재 수를 출력한다. N이 최대 5,000,000(5백만)이므로, O(nlogn)은 약 3천만이 나온다. 일반적인 정렬 알고리즘의 평균 시간 복잡도가 O(nlogn)이므로, 제한시간 2초안에 든다. 🔸 코드 🔸 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java...
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5Uskp/btrPgfIzHIP/KNORF97tu8aitkRIoq7yqK/img.png)
👉 문제링크 10989번: 수 정렬하기 3 첫째 줄에 수의 개수 N(1 ≤ N ≤ 10,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 10,000보다 작거나 같은 자연수이다. www.acmicpc.net 🔸 문제 분석 🔸 중복 가능한 n개의 수가 10,000,000개 이하로 입력되면 오름차순 정렬 후 출력한다. O(n^2) 일때, 100,000,000,000,000(백 조) 이므로 제한시간 3초를 넘기게 된다. 일반적인 Arrays.sort()는 평균 O(nlogn)이지만, 최악의 경우 O(n^2)이 나온다. 이 문제는 입출력 속도를 빠르게 하면 아슬아슬하게 통과는 가능하다. 카운팅 정렬을 사용해야한다. 입력되는 숫자를 인덱스로, 카운트를 진행하고 출력한다. 🔸 코드 🔸..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c2i7yT/btrO9zsbZQ1/wsE0BJ7PAutM7eAkTEZktK/img.png)
👉 문제링크 1411번: 비슷한 단어 첫째 줄에 단어의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에 한 줄에 하나씩 단어가 주어진다. 단어의 길이는 최대 50이고, N은 100보다 작거나 같은 자연수이다. 모든 단어의 길이는 같고, 중복 www.acmicpc.net 🔸 문제 분석 🔸 n개의 문자열에서 서로 비슷한 쌍의 수를 출력한다. 비슷하다는 의미는 문자열의 문자가 같은 방식으로만 변환 된 상태이다. 다른 두 문자가 하나의 문자로 중복되어 변환되지 못한다. 시간복잡도를 계산해보자 n개의 문자열이 갖을 수 있는 모든 쌍을 계산하므로 선택정렬과 같다. O(n^2) 그 안에서 문자열을 하나씩 검사해야한다. O(m) 따라서 시간 복잡도는 O(n^2 * m) 계산하면 100*100*50 == 500,000(5..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/y4rKz/btrOFkC1nsL/TDzGL7h0PhKKef0rQr97Bk/img.png)
👉 문제링크 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 🔸 문제 분석 🔸 지그재그로 그린 배열에서 x번째 위치의 분수를 출력한다. 대각선으로 라인을 세었을때 짝,홀의 분자,분모 규칙이 반대이다. 🔸 코드 🔸 x = int(input()) line = 0 end = 0 while x > end: line += 1 end += line diff = end - x if line % 2 != 0: u = diff + 1 d = line - diff else: u = line - diff d = diff + 1 print(f'{u}/{d}') 🔸 코드 해석 🔸 line은 x가 해당하는 라인 번호이다. end는 x가 해당하는 라인의 끝 인덱스이다..