diff --git "a/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/README.md" "b/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/README.md" new file mode 100644 index 0000000..b305f7d --- /dev/null +++ "b/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/README.md" @@ -0,0 +1,37 @@ +# [Bronze I] 알고리즘 수업 - 선택 정렬 1 - 23881 + +[문제 링크](https://www.acmicpc.net/problem/23881) + +### 성능 요약 + +메모리: 32276 KB, 시간: 1412 ms + +### 분류 + +구현, 시뮬레이션, 정렬 + +### 문제 설명 + +
오늘도 서준이는 선택 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 선택 정렬로 배열 A를 오름차순 정렬할 경우 K 번째 교환되는 수를 구해서 우리 서준이를 도와주자.
+ +크기가 N인 배열에 대한 선택 정렬 의사 코드는 다음과 같다.
+ +selection_sort(A[1..N]) { # A[1..N]을 오름차순 정렬한다.
+ for last <- N downto 2 {
+ A[1..last]중 가장 큰 수 A[i]를 찾는다
+ if (last != i) then A[last] <-> A[i] # last와 i가 서로 다르면 A[last]와 A[i]를 교환
+ }
+}
+
+### 입력
+
+ 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 10,000), 교환 횟수 K(1 ≤ K ≤ N)가 주어진다.
+ +다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)
+ +### 출력 + +K 번째 교환되는 두 개의 수를 작은 수부터 한 줄에 출력한다. 교환 횟수가 K 보다 작으면 -1을 출력한다.
+ diff --git "a/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051.py" "b/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051.py" new file mode 100644 index 0000000..b34a24c --- /dev/null +++ "b/\353\260\261\354\244\200/Bronze/23881.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2051.py" @@ -0,0 +1,22 @@ +import sys + +# sys.stdin = open("input.txt", "r") +input = sys.stdin.readline + +n, k = map(int, input().split()) +l = list(map(int, input().split())) + +cnt = 0 + +for i in range(n - 1, 0, -1): + index = l.index(max(l[:i + 1])) + + if index != i: + l[index], l[i] = l[i], l[index] + cnt += 1 + + if cnt == k: + print(l[index], l[i]) + exit() + +print(-1) \ No newline at end of file diff --git "a/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/README.md" "b/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/README.md" new file mode 100644 index 0000000..5243315 --- /dev/null +++ "b/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/README.md" @@ -0,0 +1,37 @@ +# [Bronze I] 알고리즘 수업 - 선택 정렬 2 - 23882 + +[문제 링크](https://www.acmicpc.net/problem/23882) + +### 성능 요약 + +메모리: 32276 KB, 시간: 1372 ms + +### 분류 + +구현, 시뮬레이션, 정렬 + +### 문제 설명 + +오늘도 서준이는 선택 정렬 수업 조교를 하고 있다. 아빠가 수업한 내용을 학생들이 잘 이해했는지 문제를 통해서 확인해보자.
+ +N개의 서로 다른 양의 정수가 저장된 배열 A가 있다. 선택 정렬로 배열 A를 오름차순 정렬할 경우 K 번 교환이 발생한 직후의 배열 A를 출력해 보자.
+ +크기가 N인 배열에 대한 선택 정렬 의사 코드는 다음과 같다.
+ +selection_sort(A[1..N]) { # A[1..N]을 오름차순 정렬한다.
+ for last <- N downto 2 {
+ A[1..last]중 가장 큰 수 A[i]를 찾는다
+ if (last != i) then A[last] <-> A[i] # last와 i가 서로 다르면 A[last]와 A[i]를 교환
+ }
+}
+
+### 입력
+
+ 첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 10,000), 교환 횟수 K(1 ≤ K ≤ N)가 주어진다.
+ +다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)
+ +### 출력 + +K 번 교환이 발생한 직후의 배열 A를 한 줄에 출력한다. 교환 횟수가 K 보다 작으면 -1을 출력한다.
+ diff --git "a/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052.py" "b/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052.py" new file mode 100644 index 0000000..b67e1eb --- /dev/null +++ "b/\353\260\261\354\244\200/Bronze/23882.\342\200\205\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052/\354\225\214\352\263\240\353\246\254\354\246\230\342\200\205\354\210\230\354\227\205\342\200\205\357\274\215\342\200\205\354\204\240\355\203\235\342\200\205\354\240\225\353\240\254\342\200\2052.py" @@ -0,0 +1,22 @@ +import sys + +# sys.stdin = open("input.txt", "r") +input = sys.stdin.readline + +n, k = map(int, input().split()) +l = list(map(int, input().split())) + +cnt = 0 + +for i in range(n - 1, 0, -1): + index = l.index(max(l[:i + 1])) + + if index != i: + l[index], l[i] = l[i], l[index] + cnt += 1 + + if cnt == k: + print(*l) + exit() + +print(-1) \ No newline at end of file diff --git "a/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv3/68646.\342\200\205\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260/README.md" "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv3/68646.\342\200\205\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260/README.md" new file mode 100644 index 0000000..ca48707 --- /dev/null +++ "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv3/68646.\342\200\205\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260/README.md" @@ -0,0 +1,100 @@ +# [level 3] 풍선 터트리기 - 68646 + +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/68646) + +### 성능 요약 + +메모리: 89.5 MB, 시간: 27.46 ms + +### 구분 + +코딩테스트 연습 > 월간 코드 챌린지 시즌1 + +### 채점결과 + +Empty + +### 문제 설명 + +일렬로 나열된 n개의 풍선이 있습니다. 모든 풍선에는 서로 다른 숫자가 써져 있습니다. 당신은 다음 과정을 반복하면서 풍선들을 단 1개만 남을 때까지 계속 터트리려고 합니다.
+ +여기서 조건이 있습니다. 인접한 두 풍선 중에서 번호가 더 작은 풍선을 터트리는 행위는 최대 1번만 할 수 있습니다. 즉, 어떤 시점에서 인접한 두 풍선 중 번호가 더 작은 풍선을 터트렸다면, 그 이후에는 인접한 두 풍선을 고른 뒤 번호가 더 큰 풍선만을 터트릴 수 있습니다.
+ +당신은 어떤 풍선이 최후까지 남을 수 있는지 알아보고 싶습니다. 위에 서술된 조건대로 풍선을 터트리다 보면, 어떤 풍선은 최후까지 남을 수도 있지만, 어떤 풍선은 무슨 수를 쓰더라도 마지막까지 남기는 것이 불가능할 수도 있습니다.
+ +일렬로 나열된 풍선들의 번호가 담긴 배열 a가 주어집니다. 위에 서술된 규칙대로 풍선들을 1개만 남을 때까지 터트렸을 때 최후까지 남기는 것이 가능한 풍선들의 개수를 return 하도록 solution 함수를 완성해주세요.
+ +a[i]는 i+1 번째 풍선에 써진 숫자를 의미합니다.| a | +result | +
|---|---|
[9,-1,-5] |
+3 | +
[-16,27,65,-2,58,-92,-71,-68,-61,-33] |
+6 | +
입출력 예 #1
+ +[9, -1, -5] 에서 -1, -5가 써진 풍선을 고른 뒤, -1이 써진 풍선(번호가 더 큰 것)을 터트립니다.[9, -5] 에서 9, -5가 써진 풍선을 고른 뒤, -5가 써진 풍선(번호가 더 작은 것)을 터트립니다.[9, -1, -5] 에서 9, -1이 써진 풍선을 고른 뒤, 9가 써진 풍선(번호가 더 큰 것)을 터트립니다.[-1, -5] 에서 -1, -5가 써진 풍선을 고른 뒤, -5가 써진 풍선(번호가 더 작은 것)을 터트립니다.[9, -1, -5] 에서 9, -1이 써진 풍선을 고른 뒤, 9가 써진 풍선(번호가 더 큰 것)을 터트립니다.[-1, -5] 에서 -1, -5가 써진 풍선을 고른 뒤, -1이 써진 풍선(번호가 더 큰 것)을 터트립니다.입출력 예 #2
+ +포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g 만 입력해도 go를 추천해주므로 o를 입력할 필요가 없어진다! 단, 학습에 사용된 단어들 중 앞부분이 같은 경우에는 어쩔 수 없이 다른 문자가 나올 때까지 입력을 해야 한다.
+효과가 얼마나 좋을지 알고 싶은 라이언은 학습된 단어들을 찾을 때 몇 글자를 입력해야 하는지 궁금해졌다.
예를 들어, 학습된 단어들이 아래와 같을 때
+go
+gone
+guild
+go를 찾을 때 go를 모두 입력해야 한다.gone을 찾을 때 gon 까지 입력해야 한다.
+(gon이 입력되기 전까지는 go 인지 gone인지 확신할 수 없다.)guild를 찾을 때는 gu 까지만 입력하면 guild가 완성된다.이 경우 총 입력해야 할 문자의 수는 7이다.
라이언을 도와 위와 같이 문자열이 입력으로 주어지면 학습을 시킨 후, 학습된 단어들을 순서대로 찾을 때 몇 개의 문자를 입력하면 되는지 계산하는 프로그램을 만들어보자.
+ +학습과 검색에 사용될 중복 없는 단어 N개가 주어진다.
+모든 단어는 알파벳 소문자로 구성되며 단어의 수 N과 단어들의 길이의 총합 L의 범위는 다음과 같다.
N <= 100,000L <= 1,000,000단어를 찾을 때 입력해야 할 총 문자수를 리턴한다.
+ +| words | +result | +
|---|---|
| ["go","gone","guild"] | +7 | +
| ["abc","def","ghi","jklm"] | +4 | +
| ["word","war","warrior","world"] | +15 | +
15 자를 입력해야 하고 설명은 아래와 같다.
+
+word는 word모두 입력해야 한다.war는 war 까지 모두 입력해야 한다.warrior는 warr 까지만 입력하면 된다.world는 worl까지 입력해야 한다. (word와 구분되어야 함을 명심하자)