Week 3

Programmers - Level 2 : EASY

Week3 이번주의 문제
1 최솟값만들기
2 콜라츠추측
3 가장긴팰린드롬
4 JadenCase문자열만들기
5 행렬의곱셈
6 하샤드수

풀이

1.

첫번째 배열에서 가장 작은 값, 두번째 배열에서 가장 큰 값을 뽑고 이들을 배열에서 제거한다. 뽑은 값을 곱하여 더하기를 반복한다.

def getMinSum(A,B):
    answer = 0
    size=len(A)
    while size > 0:
        num1=min(A)
        A.remove(num1)
        num2=max(B)
        B.remove(num2)
        size-=1
        answer+=num1*num2
    return answer

#아래 코드는 출력을 위한 테스트 코드입니다.

print(getMinSum([1,2],[3,4]))

2.

def collatz(num):
    
    answer = 0
    while True:
        if num==1:
            break
        elif answer ==500:
            answer=-1
            break
        elif num%2==0: #짝수
            num=num/2
        elif (num-1)%2==0:#홀수
            num=num*3+1
            
        answer+=1    
    return answer

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(collatz(6))

3.

def longest_palindrom(s):
    # 함수를 완성하세요
    if s==s[::-1]:
        return len(s)
    return max(longest_palindrom(s[:-1]),longest_palindrom(s[1:]))


# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(longest_palindrom("토마토맛토마토")) #7
print(longest_palindrom("토마토맛있어"))#3
print(longest_palindrom("저기저사람여보게저기저게보여"))#9

4.

  • split()으로 공백단위 쪼개기
  • a[1:].lower() 문자열의 첫번째 단어를 제외한 나머지를 소문자 만들기
  • a[0].upper() 문자열의 첫번째 단어를 대문자화
  • 이 둘을 더하여 변환된 문자열 만들기

공백" " 으로 연결했기 때문에 마지막 결과값 반환시 [:-1] 마지막 값은 반환 하지 않게 하였다.

def Jaden_Case(s):
    # 함수를 완성하세요
    list=s.split()
    res=""
    for a in list:
        low=a[1:].lower()
        up=a[0].upper()
        res=res+(up+low)+" "
    return res[:-1]      

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(Jaden_Case("3people unFollowed me for the last week"))

다른 방법.1

변환한 단어들을 리스트화하고, join()을 사용하여 공백으로 묶는다

def Jaden_Case(s):
    # 함수를 완성하세요
    list=s.split()
    res=[]
    for a in list:
        low=a[1:].lower()
        up=a[0].upper()
        res.append(up+low)
    return ' '.join(res)

다른 방법.2

문자열에 쓰이는 함수를 알면 쉽다….
  • lower()로 전체 문장을 소문자화
  • title()로 단어의 각 첫 문자를 대문자화
def Jaden_Case(s):
    # 함수를 완성하세요
    s=s.lower()
    return s.title()

5.

  • 행렬 곱셈을 구현해라

#include<iostream>
#include<vector>
using namespace std;

vector<vector<int> >productMatrix(vector<vector<int> >A, vector<vector<int> >B)
{
  int sizeA=A.size(),sizeA0=A[0].size(),sizeB0=B[0].size();
        vector<vector<int> >answer;
  answer.resize(sizeA,vector<int>(sizeB0));
        for(int i=0;i<sizeA;i++){
    for(int j=0;j<sizeB0;j++){
     for(int k=0;k<sizeA0;k++){
     answer[i][j]+=A[i][k]*B[k][j];
     }
    }
  }
        return answer;
}

int main()
{
        vector<vector<int> >A{
          {1,2}, {2,3}
        };
        vector<vector<int> >B{
          {2,3}, {3,4}
        };
        vector<vector<int> > testAnswer = productMatrix(A,B);

        for(int i=0;i<testAnswer.size(); i++)
        {
                for(int j=0;j<testAnswer[i].size(); j++)
                        cout<<testAnswer[i][j]<<" ";
                cout<<"\n";
        }
}


6.


def Harshad(n):
    # n은 하샤드 수 인가요?
    number=n
    char=str(number)
    sum=0
    for a in char:
        sum+=int(a)
    if number%sum==0:
        return True
    return False

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(Harshad(18))