programmers 20260521까지 한거 전부
This commit is contained in:
parent
813717f824
commit
ce0e41472f
43
code_study/programmers/스킬 체크 테스트 Level 1/problem.txt
Normal file
43
code_study/programmers/스킬 체크 테스트 Level 1/problem.txt
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
문제 1
|
||||||
|
단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
|
||||||
|
단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
|
||||||
|
|
||||||
|
재한사항
|
||||||
|
s는 길이가 1 이상, 100이하인 스트링입니다.
|
||||||
|
|
||||||
|
입출력 예
|
||||||
|
s return
|
||||||
|
"abcde" "c"
|
||||||
|
"qwer" "we"
|
||||||
|
|
||||||
|
문제 2
|
||||||
|
네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다.
|
||||||
|
그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다.
|
||||||
|
다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.
|
||||||
|
지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.
|
||||||
|
전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다.
|
||||||
|
각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다.
|
||||||
|
지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
|
||||||
|
"지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.
|
||||||
|
암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.
|
||||||
|
|
||||||
|
입력 형식
|
||||||
|
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
|
||||||
|
1 ≦ n ≦ 16
|
||||||
|
arr1, arr2는 길이 n인 정수 배열로 주어진다.
|
||||||
|
정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
|
||||||
|
출력 형식
|
||||||
|
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
|
||||||
|
|
||||||
|
입출력 예제
|
||||||
|
매개변수 값
|
||||||
|
n 5
|
||||||
|
arr1 [9, 20, 28, 18, 11]
|
||||||
|
arr2 [30, 1, 21, 17, 28]
|
||||||
|
출력 ["#####","# # #", "### #", "# ##", "#####"]
|
||||||
|
|
||||||
|
매개변수 값
|
||||||
|
n 6
|
||||||
|
arr1 [46, 33, 33 ,22, 31, 50]
|
||||||
|
arr2 [27 ,56, 19, 14, 14, 10]
|
||||||
|
출력 ["######", "### #", "## ##", " #### ", " #####", "### # "]
|
||||||
6
code_study/programmers/스킬 체크 테스트 Level 1/solution1.py
Normal file
6
code_study/programmers/스킬 체크 테스트 Level 1/solution1.py
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
def solution(s):
|
||||||
|
return s[(l - 1) // 2] if (l := len(s)) % 2 == 1 else s[l//2 - 1 : l//2 + 1]
|
||||||
|
|
||||||
|
print(solution("hello"))
|
||||||
|
print(solution("abcde"))
|
||||||
|
print(solution("qwer"))
|
||||||
21
code_study/programmers/스킬 체크 테스트 Level 1/solution2.py
Normal file
21
code_study/programmers/스킬 체크 테스트 Level 1/solution2.py
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
def solution(n, arr1, arr2):
|
||||||
|
ans = []
|
||||||
|
|
||||||
|
for a, b in zip(arr1, arr2) :
|
||||||
|
row = ""
|
||||||
|
num = a | b
|
||||||
|
|
||||||
|
while num != 0:
|
||||||
|
val = num % 2
|
||||||
|
row += "#" if val else " "
|
||||||
|
num //= 2
|
||||||
|
|
||||||
|
while len(row) < n :
|
||||||
|
row += " "
|
||||||
|
|
||||||
|
ans.append(row[::-1])
|
||||||
|
|
||||||
|
return ans
|
||||||
|
|
||||||
|
print(solution(6, [46, 33, 33 ,22, 31, 50], [27 ,56, 19, 14, 14, 10]))
|
||||||
|
["######", "### #", "## ##", " #### ", " #####", "### # "]
|
||||||
47
code_study/programmers/스킬 체크 테스트 Level 2/problem.txt
Normal file
47
code_study/programmers/스킬 체크 테스트 Level 2/problem.txt
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
문제 1
|
||||||
|
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다.
|
||||||
|
사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
|
||||||
|
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
|
||||||
|
|
||||||
|
제한사항
|
||||||
|
word의 길이는 1 이상 5 이하입니다.
|
||||||
|
word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
|
||||||
|
|
||||||
|
입출력 예
|
||||||
|
word result
|
||||||
|
"AAAAE" 6
|
||||||
|
"AAAE" 10
|
||||||
|
"I" 1563
|
||||||
|
"EIO" 1189
|
||||||
|
|
||||||
|
문제 2
|
||||||
|
문제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.
|
||||||
|
과제는 시작하기로 한 시각이 되면 시작합니다.
|
||||||
|
새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다.
|
||||||
|
진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다.
|
||||||
|
만약, 과제를 끝낸 시각에 새로 시작해야 되는 과제와 잠시 멈춰둔 과제가 모두 있다면, 새로 시작해야 하는 과제부터 진행합니다.
|
||||||
|
멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다.
|
||||||
|
과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해주세요.
|
||||||
|
|
||||||
|
제한사항
|
||||||
|
3 ≤ plans의 길이 ≤ 1,000
|
||||||
|
plans의 원소는 [name, start, playtime]의 구조로 이루어져 있습니다.
|
||||||
|
name : 과제의 이름을 의미합니다.
|
||||||
|
2 ≤ name의 길이 ≤ 10
|
||||||
|
name은 알파벳 소문자로만 이루어져 있습니다.
|
||||||
|
name이 중복되는 원소는 없습니다.
|
||||||
|
start : 과제의 시작 시각을 나타냅니다.
|
||||||
|
"hh:mm"의 형태로 "00:00" ~ "23:59" 사이의 시간값만 들어가 있습니다.
|
||||||
|
모든 과제의 시작 시각은 달라서 겹칠 일이 없습니다.
|
||||||
|
과제는 "00:00" ... "23:59" 순으로 시작하면 됩니다. 즉, 시와 분의 값이 작을수록 더 빨리 시작한 과제입니다.
|
||||||
|
playtime : 과제를 마치는데 걸리는 시간을 의미하며, 단위는 분입니다.
|
||||||
|
1 ≤ playtime ≤ 100
|
||||||
|
playtime은 0으로 시작하지 않습니다.
|
||||||
|
배열은 시간순으로 정렬되어 있지 않을 수 있습니다.
|
||||||
|
진행중이던 과제가 끝나는 시각과 새로운 과제를 시작해야하는 시각이 같은 경우 진행중이던 과제는 끝난 것으로 판단합니다.
|
||||||
|
|
||||||
|
입출력 예
|
||||||
|
plans result
|
||||||
|
[["korean", "11:40", "30"], ["english", "12:10", "20"], ["math", "12:30", "40"]] ["korean", "english", "math"]
|
||||||
|
[["science", "12:40", "50"], ["music", "12:20", "40"], ["history", "14:00", "30"], ["computer", "12:30", "100"]] ["science", "history", "computer", "music"]
|
||||||
|
[["aaa", "12:00", "20"], ["bbb", "12:10", "30"], ["ccc", "12:40", "10"]] ["bbb", "ccc", "aaa"]
|
||||||
20
code_study/programmers/스킬 체크 테스트 Level 2/solution1.swift
Normal file
20
code_study/programmers/스킬 체크 테스트 Level 2/solution1.swift
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
func solution(_ word:String) -> Int {
|
||||||
|
let dict: [Character: Int] = ["A": 0, "E": 1, "I": 2, "O": 3, "U": 4]
|
||||||
|
var idx: Int = 5
|
||||||
|
var ans: Int = 0
|
||||||
|
|
||||||
|
for c in word {
|
||||||
|
let w: Int = (Int(pow(Double(5), Double(idx))) - 1) / 4
|
||||||
|
ans += w * dict[c, default: 0] + 1
|
||||||
|
idx -= 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return ans
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let word: String = "AAAE"
|
||||||
|
|
||||||
|
print(solution(word))
|
||||||
53
code_study/programmers/스킬 체크 테스트 Level 2/solution2.swift
Normal file
53
code_study/programmers/스킬 체크 테스트 Level 2/solution2.swift
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import Foundation
|
||||||
|
|
||||||
|
func solution(_ plans: [[String]]) -> [String] {
|
||||||
|
var tasks: [(name: String, start: Int, playTime: Int)] = []
|
||||||
|
|
||||||
|
func timeToMinutes(_ timeStr: String) -> Int {
|
||||||
|
let components = timeStr.split(separator: ":").map { Int($0)! }
|
||||||
|
return components[0] * 60 + components[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
for plan in plans {
|
||||||
|
let name = plan[0]
|
||||||
|
let start = timeToMinutes(plan[1])
|
||||||
|
let playTime = Int(plan[2])!
|
||||||
|
tasks.append((name, start, playTime))
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.sort { $0.start < $1.start }
|
||||||
|
|
||||||
|
var answer: [String] = []
|
||||||
|
var stack: [(name: String, remainingTime: Int)] = []
|
||||||
|
|
||||||
|
for i in 0..<(tasks.count - 1) {
|
||||||
|
let currentTask = tasks[i]
|
||||||
|
let nextTask = tasks[i + 1]
|
||||||
|
|
||||||
|
var availableTime = nextTask.start - currentTask.start
|
||||||
|
stack.append((currentTask.name, currentTask.playTime))
|
||||||
|
|
||||||
|
while availableTime > 0 && !stack.isEmpty {
|
||||||
|
let lastIndex = stack.count - 1
|
||||||
|
var pausedTask = stack[lastIndex]
|
||||||
|
|
||||||
|
if pausedTask.remainingTime <= availableTime {
|
||||||
|
answer.append(pausedTask.name)
|
||||||
|
availableTime -= pausedTask.remainingTime
|
||||||
|
stack.removeLast()
|
||||||
|
} else {
|
||||||
|
pausedTask.remainingTime -= availableTime
|
||||||
|
stack[lastIndex] = pausedTask
|
||||||
|
availableTime = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
answer.append(tasks.last!.name)
|
||||||
|
|
||||||
|
while !stack.isEmpty {
|
||||||
|
answer.append(stack.removeLast().name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return answer
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user