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