문제 설명


2차원 행렬 arr1과 arr2를 입력받아, arr1에 arr2를 곱한 결과를 반환하는 함수, solution을 완성해주세요.

제한조건

 

  • 행렬 arr1, arr2의 행과 열의 길이는 2 이상 100 이하입니다.
  • 행렬 arr1, arr2의 원소는 -10 이상 20 이하인 자연수입니다.
  • 곱할 수 있는 배열만 주어집니다.

 

 

입출력 예

 

arr1 arr2 return
[[1, 4], [3, 2], [4, 1]] [[3, 3], [3, 3]] [[15, 15], [15, 15], [15, 15]]
[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

 

나의 풀이

 

def solution(arr1, arr2):
    a=[[0]*len(arr2[0]) for i in range(len(arr1))] 
    for i in range(len(arr1)):
        for j in range(len(arr2[0])):
            for k in range(len(arr2)):
                a[i][j] += arr1[i][k] * arr2[k][j]
    return a

1. for문을 이용해 행렬의 곱셈을 구합니다.


두 행렬이 예제 1번처럼 3x2, 2x2 이면 행렬의 곱셈후에는 3x2 행렬이 됩니다. (첫 번째 행렬의 행, 두 번째 행렬의 열)

그리고 첫 번째 행렬의 열과 두 번째 행의 행은 같아야 합니다. (2=2)

 

예제 2번을 통해 행렬의 곱셈을 구하는 것을 보면 다음과 같습니다.

2*5 + 3*2 + 2*3 = 22 2*4 + 3*4 + 2*1 = 22 2*3 + 3*1 + 2*1 = 11
4*5 + 2*2 + 4*3 = 36 4*4 + 2*4 + 4*1 = 28 4*3 + 2*1 + 4*1 = 18
3*5 + 1*2 + 4*3 = 29 3*4 + 1*4 + 4*1 = 20 3*3 + 1*1 + 4*1 = 14

 


프로그래머스 '행렬의 곱셈' : https://programmers.co.kr/learn/courses/30/lessons/12949

 

코딩테스트 연습 - 행렬의 곱셈

[[2, 3, 2], [4, 2, 4], [3, 1, 4]] [[5, 4, 3], [2, 4, 1], [3, 1, 1]] [[22, 22, 11], [36, 28, 18], [29, 20, 14]]

programmers.co.kr

 

문제 설명


자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

  • 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
  • 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
  • 조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

 

제한조건

 

  • n은 1,000,000 이하의 자연수 입니다.

입출력 예

 

n result
78 83
15 23

 

입출력 예 설명


입출력 예#1
문제 예시와 같습니다.
입출력 예#2
15(1111)의 다음 큰 숫자는 23(10111)입니다.

나의 풀이

 

def solution(n):
    c = n+1
    while True:
        if bin(c).count('1') == bin(n).count('1'):
            return c
        c += 1

1. n을 이진수로 바꿨을 때의 1의 개수랑 n을 1씩 증가하여 이진수로 바꿨을 때 1의 개수가 같다면 c를 리턴합니다.

 


프로그래머스 '다음 큰 숫자' : https://programmers.co.kr/learn/courses/30/lessons/12911

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

 

문제 설명


124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.

  1. 124 나라에는 자연수만 존재합니다.
  2. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.

10진법 124나라 10진법 124나라
1 1 6 14
2 2 7 21
3 4 8 22
4 11 9 24
5 12 10 41

자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.

 

제한조건

 

  • n은 500,000,000이하의 자연수 입니다.

입출력 예

 

n result
1 1
2 2
3 4
4 11

 

나의 풀이

 

def solution(n):
    answer = ''
    while n > 0:
        n, a = divmod(n, 3)
        if a == 0:
            n = n - 1
        answer = '412'[a] + answer

    return answer

1. 나머지가 0이면 4를, 1이면 1을, 2면 2를 문자열로 answer에 더해서 리턴합니다.

 


프로그래머스 '124 나라의 숫자' : https://programmers.co.kr/learn/courses/30/lessons/12899

 

코딩테스트 연습 - 124 나라의 숫자

124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다. 124 나라에는 자연수만 존재합니다. 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.

programmers.co.kr

 

문제 설명


두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요. 

제한조건

 

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

 

입출력 예

 

arr result
[2,6,8,14] 168
[1,2,3] 6

 

나의 풀이

 

def solution(arr):
    m=max(arr)
    while True:
        c =0
        for i in arr:
            if m % i == 0:
                c += 1
            else:
                break
        if c == len(arr):
            break
        m += 1
    return m

1. 배열 arr의 가장 큰 값부터 하나씩 증가하며 배열 arr의 값들을 모두 약수로 가지는지 확인합니다.

2. 모두 약수로 가지는 수가 나오면 리턴합니다.

 

다른 사람의 풀이

 

import math

def solution(num):      
    answer = num[0]
    for n in num:
        answer = (n * answer) // math.gcd(n, answer)
    return answer

math모듈의 gcd(최대공약수)을 이용했습니다.

리스트의 첫번째부터 시작해 계속해서 최소공배수를 계산하고 마지막에 나온 값을 리턴합니다.

 


프로그래머스 'N개의 최소공배수' : https://programmers.co.kr/learn/courses/30/lessons/12953

 

코딩테스트 연습 - N개의 최소공배수

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배��

programmers.co.kr

 

문제 설명


JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.

제한조건

 

  • s는 길이 1 이상인 문자열입니다.
  • s는 알파벳과 공백문자(" ")로 이루어져 있습니다.
  • 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 )

 

 

입출력 예

 

s return
3people unFollowed me 3people Unfollowed Me
for the last week For The Last Week

 

나의 풀이

 

def solution(s):
    s=list(s.lower())
    if s[0].isalpha() is True:
        s[0]=s[0].upper()
    for i in range(1,len(s)):
        if s[i-1] == ' ' and s[i].isalpha() is True:
            s[i]=s[i].upper()

    return ''.join(s)

s.split()과 s.title()을 이용해 간단한 문제인 줄 알았는데 문자열 s에 공백이 연달아 나올 수 있다는 예외가 있었습니다.

 

1. 문자열 s를 소문자로 바꾸고 리스트로 만듭니다.

2. 문자열 첫번째 자리가 알파벳인 경우 대문자로 바꿉니다.

3. 두번째 문자열 자리부터 앞자리에 공백이 있고 뒷자리가 알파벳이면 단어의 첫 문자인 것을 알 수 있기 때문에 이럴 경우 해당 문자열을 대문자로 바꿉니다.

4. 리스트를 리턴합니다. 


프로그래머스 'JadenCase 문자열 만들기' : programmers.co.kr/learn/courses/30/lessons/12951

 

코딩테스트 연습 - JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건

programmers.co.kr

 

문제 설명

 

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5

와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

 

제한조건

 

  • n은 1이상, 100000이하인 자연수입니다.

입출력 예

 

n return
3 2
5 5

 

입출력 예 설명


피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.

나의 풀이

 

def solution(n):
    a=[0]*(n+1)
    a[1]=1
    for i in range(2,n+1):
        a[i]= (a[i-1] + a[i-2]) % 1234567
    return a[n]

1. for문을 통해 피보나치의 수를 구해 리스트 a에 저장하고 리턴합니다.

 


프로그래머스 '피보나치 수' : https://programmers.co.kr/learn/courses/30/lessons/12945

 

코딩테스트 연습 - 피보나치 수

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) =

programmers.co.kr

 

+ Recent posts