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. 임의의 인접한 두 풍선을 고른 뒤, 두 풍선 중 하나를 터트립니다.
  2. +
  3. 터진 풍선으로 인해 풍선들 사이에 빈 공간이 생겼다면, 빈 공간이 없도록 풍선들을 중앙으로 밀착시킵니다.
  4. +
+ +

여기서 조건이 있습니다. 인접한 두 풍선 중에서 번호가 더 작은 풍선을 터트리는 행위는 최대 1번만 할 수 있습니다. 즉, 어떤 시점에서 인접한 두 풍선 중 번호가 더 작은 풍선을 터트렸다면, 그 이후에는 인접한 두 풍선을 고른 뒤 번호가 더 큰 풍선만을 터트릴 수 있습니다.

+ +

당신은 어떤 풍선이 최후까지 남을 수 있는지 알아보고 싶습니다. 위에 서술된 조건대로 풍선을 터트리다 보면, 어떤 풍선은 최후까지 남을 수도 있지만, 어떤 풍선은 무슨 수를 쓰더라도 마지막까지 남기는 것이 불가능할 수도 있습니다.

+ +

일렬로 나열된 풍선들의 번호가 담긴 배열 a가 주어집니다. 위에 서술된 규칙대로 풍선들을 1개만 남을 때까지 터트렸을 때 최후까지 남기는 것이 가능한 풍선들의 개수를 return 하도록 solution 함수를 완성해주세요.

+ +
+ +
제한 사항
+ + + +
+ +
입출력 예
+ + + + + + + + + + + + + + + +
aresult
[9,-1,-5]3
[-16,27,65,-2,58,-92,-71,-68,-61,-33]6
+
+ +
입출력 예 설명
+ +

입출력 예 #1

+ + + +

입출력 예 #2

+ + + + +> 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges \ 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/\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260.js" "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/\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260.js" new file mode 100644 index 0000000..f92d279 --- /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/\355\222\215\354\204\240\342\200\205\355\204\260\355\212\270\353\246\254\352\270\260.js" @@ -0,0 +1,23 @@ +function solution(a) { + var answer = 2; + var al = a.length; + + var ldp = [...a]; + var rdp = [...a]; + + for (let i = 1; i < al; i++) { + if (ldp[i] > ldp[i - 1]) ldp[i] = ldp[i - 1]; + } + for (let i = al - 2; i >= 0; i--) { + if (rdp[i] > rdp[i + 1]) rdp[i] = rdp[i + 1]; + } + + for (let i = 1; i < al - 1; i++) { + // console.log(a, a[i], ldp[i - 1], rdp[i + 1]); + if (a[i] < ldp[i - 1] || a[i] < rdp[i + 1]) { + answer++; + } + } + + return answer; +} \ 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/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/README.md" "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/README.md" new file mode 100644 index 0000000..b584e01 --- /dev/null +++ "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/README.md" @@ -0,0 +1,93 @@ +# [level 4] [3차] 자동완성 - 17685 + +[문제 링크](https://school.programmers.co.kr/learn/courses/30/lessons/17685?language=javascript) + +### 성능 요약 + +메모리: 37.3 MB, 시간: 0.20 ms + +### 구분 + +코딩테스트 연습 > 2018 KAKAO BLIND RECRUITMENT + +### 채점결과 + +Empty + +### 문제 설명 + +

자동완성

+ +

포털 다음에서 검색어 자동완성 기능을 넣고 싶은 라이언은 한 번 입력된 문자열을 학습해서 다음 입력 때 활용하고 싶어 졌다. 예를 들어, go 가 한 번 입력되었다면, 다음 사용자는 g 만 입력해도 go를 추천해주므로 o를 입력할 필요가 없어진다! 단, 학습에 사용된 단어들 중 앞부분이 같은 경우에는 어쩔 수 없이 다른 문자가 나올 때까지 입력을 해야 한다.
+효과가 얼마나 좋을지 알고 싶은 라이언은 학습된 단어들을 찾을 때 몇 글자를 입력해야 하는지 궁금해졌다.

+ +

예를 들어, 학습된 단어들이 아래와 같을 때

+
go
+gone
+guild
+
+ + +

이 경우 총 입력해야 할 문자의 수는 7이다.

+ +

라이언을 도와 위와 같이 문자열이 입력으로 주어지면 학습을 시킨 후, 학습된 단어들을 순서대로 찾을 때 몇 개의 문자를 입력하면 되는지 계산하는 프로그램을 만들어보자.

+ +

입력 형식

+ +

학습과 검색에 사용될 중복 없는 단어 N개가 주어진다.
+모든 단어는 알파벳 소문자로 구성되며 단어의 수 N과 단어들의 길이의 총합 L의 범위는 다음과 같다.

+ + + +

출력 형식

+ +

단어를 찾을 때 입력해야 할 총 문자수를 리턴한다.

+ +

입출력 예제

+ + + + + + + + + + + + + + + + + + + +
wordsresult
["go","gone","guild"]7
["abc","def","ghi","jklm"]4
["word","war","warrior","world"]15
+

입출력 설명

+ + + +

해설 보러가기

+ + +> 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges \ 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/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261.js" "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261.js" new file mode 100644 index 0000000..0401b3c --- /dev/null +++ "b/\355\224\204\353\241\234\352\267\270\353\236\230\353\250\270\354\212\244/lv4/17685.\342\200\205\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261/\357\274\2733\354\260\250\357\274\275\342\200\205\354\236\220\353\217\231\354\231\204\354\204\261.js" @@ -0,0 +1,43 @@ + +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +function solution(words) { + + words.sort((a, b) => a < b ? -1 : a > b ? 1 : 0); + + let r = 0, a, b, c; + + words.forEach((w, i) => { + const right = words[i + 1] || words[i - 1]; + const left = words[i - 1] || words[i + 1]; + + for (let i = 1, l = w.length; i <= l; i++) { + r++; + a = w.substring(0, i); + if (a != left.substring(0, i) && a != right.substring(0, i)) + return; + } + }); + + return r; + +} \ No newline at end of file