Week 4
Programmers - Level 3 : MEDIUM
Programmers : 2018 Summer Coding
Week4 | 이번주의 문제 |
---|---|
1 | 멀리뛰기 |
2 | 야근지수 |
3 | 2018 Summer Coding 1차 - 테스트 문제 1 |
4 | 2018 Summer Coding 1차 - 테스트 문제 2 |
5 | 2018 Summer Coding 1차 - 문제 1 |
6 | 2018 Summer Coding 1차 - 문제 2 |
7 | 2018 Summer Coding 1차 - 문제 3 |
1.
1칸, 2칸 의 경우로 두어 재귀함수를 동작시켜 해결함
class JumpCase {
int answer = 0;
public int jumpCase(int num) {
if(num==0)
answer++;
if(num>0){
jumpCase(num-1);
jumpCase(num-2);
}
return answer;
}
public static void main(String[] args) {
JumpCase c = new JumpCase();
int testCase = 4;
//아래는 테스트로 출력해 보기 위한 코드입니다.
System.out.println(c.jumpCase(testCase));
}
}
2.
파이썬코드 작성했다면 더 짧은 줄로 끝났을 것이다. 배열(작업량)의 값들을 제곱한 값이 최소가 되려면 각 요소의 편차가 작아야한다.
따라서 N시간(반복횟수)
마다 배열의 값들 중에 최대값을 찾고 그 값에 -1
을 해준다. N시간
뒤 배열의 요소값을 제곱하여 더해줌.
class NoOvertime {
public int noOvertime(int no, int[] works) {
int result = 0;
// 야근 지수를 최소화 하였을 때의 야근 지수는 몇일까요?
for(int i=0;i<no;i++){
int maxVal=0;
int maxIndex=0;
for(int j=0;j<works.length;j++){
if(works[j]>maxVal){
maxVal=works[j];
maxIndex=j;
}
}
works[maxIndex]=maxVal-1;
}
return getResult(works);
}
public int getResult(int[] works){
int result=0;
for(int i=0;i<works.length;i++){
result+=works[i]*works[i];
}
return result;
}
public static void main(String[] args) {
NoOvertime c = new NoOvertime();
int []test = {4,3,3};
System.out.println(c.noOvertime(4,test));
}
}
3.
def func(data):
size=len(data)
if size > 100000:
return "data length error"
for i in data:
if i > 100000:
return "number error"
for i in range(1,size+1):
if i in data:
data.remove(i)
if len(data) != 0:
return False
else :
return True
case1=[4,1,2,3]
case2=[4,1,3]
print(func(case1))
print(func(case2))
4.
def palindrome(s):
if s==s[::-1]:
return len(s)
return max(palindrome(s[:-1]),palindrome(s[1:]))
def result(data):
if len(data) > 2500:
return "length error "
elif data.isupper():
return "must lower case"
else :
print(palindrome(data))
result("abcdcba")
result("abacde")
5.
def quiz_1(arr,budget):
size=len(arr)
if size < 0 or size >100:
return "array size error"
elif budget > 10000000 or budget <0:
return "budget error"
arr.sort()
count=0
for i in arr:
if not float(i).is_integer():
return "value error"
elif budget-i>=0:
budget=budget-i
count+=1
return(count)
listA=[1,3,2,5,4]
budgetA=9
listB=[2,2,3,3]
budgetB=10
print(quiz_1(listA,budgetA))
print(quiz_1(listB,budgetB))
6.
import math
def quiz_2(n,words):
exist=[words[0]]
i=1
for word in words[1:]:
if exist[-1][-1] == word[0] and word not in exist:
exist.append(word)
i+=1
else :
return [n-((i+1)%n),math.ceil((i+1)/n)]
return [0,0]
print(quiz_2(3,["tank","kick","know","wheel","land","dream","mother","robot","tank"]))
print(quiz_2(5,["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"]))
print(quiz_2(2,["hello", "one", "even", "never", "now", "world", "draw"]))