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"]))