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