📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

길이가 같은 배열 A, B 두개가 있습니다. 각 배열은 자연수로 이루어져 있습니다.
배열 A, B에서 각각 한 개의 숫자를 뽑아 두 수를 곱합니다. 이러한 과정을 배열의 길이만큼 반복하며, 두 수를 곱한 값을 누적하여 더합니다. 이때 최종적으로 누적된 값이 최소가 되도록 만드는 것이 목표입니다. (단, 각 배열에서 k번째 숫자를 뽑았다면 다음에 k번째 숫자는 다시 뽑을 수 없습니다.)

예를 들어 A = [1, 4, 2] , B = [5, 4, 4] 라면

 

  • A에서 첫번째 숫자인 1, B에서 첫번째 숫자인 5를 뽑아 곱하여 더합니다. (누적된 값 : 0 + 5(1x5) = 5)
  • A에서 두번째 숫자인 4, B에서 세번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 5 + 16(4x4) = 21)
  • A에서 세번째 숫자인 2, B에서 두번째 숫자인 4를 뽑아 곱하여 더합니다. (누적된 값 : 21 + 8(2x4) = 29)
    즉, 이 경우가 최소가 되므로 29를 return 합니다.

    배열 A, B가 주어질 때 최종적으로 누적된 최솟값을 return 하는 solution 함수를 완성해 주세요.

 

📌 제한 사항

  • 배열 A, B의 크기 : 1,000 이하의 자연수
  • 배열 A, B의 원소의 크기 : 1,000 이하의 자연수

 

📌 입출력 예


추측) 

가장 최솟값을 만들려면 가장 작은값과 가장큰 값을 곱해서 누적해야 할 듯하다. A도 B도 정렬을 하되 하나는 역순 정렬을 하고 for문으로 같은 인덱스값 곱해줘서 누적시키고 누적값을 리턴!

 

소스코드) 

* 1차) 성공!

def solution(A,B):
    answer = 0
    A.sort()
    B.sort(reverse = True)

    for i in range(len(A)):
        answer += A[i] * B[i]
    
    return answer

 

리뷰) 

다른 사람들의 풀이를 보니 한줄 for문과 리스트 표현식에 sum 함수로 한줄로 정리도 된다 와우!

람다 방식로도 풀었던데 다양한 방식으로 나중에 도전해보고 어떤게 효율적인지 봐야겟다. 

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] [1차] 캐시  (0) 2023.03.18
Programmers] 괄호 회전하기  (0) 2023.03.14
Programmers] N개의 최소공배수  (0) 2023.03.07
Programmers] 최댓값과 최솟값  (0) 2023.03.06
Programmers] 카드 뭉치  (0) 2023.02.28

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

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

 

📌 제한 사항

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

 

📌 입출력 예


추측) 

가장 큰수를 기준으로 배수를 구하고그 배수마다 다른 요소들을 나누다가 모두가 0이 되는 순간의 가장 큰수의 배수를 리턴하면 될 듯하다. 

 

소스코드) 

* 1차) 

def solution(arr):
    max_num = max(arr)
    i = 1
    while True :
        multi_num = max_num * i
        flag = True
        for one in arr :
            if multi_num % one != 0:
                flag = False

        if flag :
            return multi_num
        else :
            i += 1

 

리뷰) 

추측대로 구현가능!

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 괄호 회전하기  (0) 2023.03.14
Programmers] 최솟값 만들기  (0) 2023.03.13
Programmers] 최댓값과 최솟값  (0) 2023.03.06
Programmers] 카드 뭉치  (0) 2023.02.28
Programmers] [1차] 비밀지도  (0) 2023.02.28

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요.
예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다.

 

📌 제한 사항

  • s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.

 

📌 입출력 예


추측) 

공백기준으로 배열을 만들고 min()을 통해 최소값을, max()을 통해 최댓값을 문자열로 더해주면 될듯하다.

함수 안쓴다면 배열 정렬해서 첫번째 값과 마지막 값만 가져오거나 둘 값을 제외한 나머지를 제거하는 방식으로도 가능할 듯 하다 

 

소스코드) 

* 1차) 실패

def solution(s):
    answer = ""
    s_arr = s.split(" ")
    answer += min(s_arr) + " " + max(s_arr)
    return answer

* 2차) 성공

def solution(s):
    answer = ""
    s_arr = [int(one) for one in s.split(" ")]
    answer += str(min(s_arr)) + " " + str(max(s_arr))
    return answer

 

리뷰) 

-숫자 문자열 같은 경우에는 (-1), (-4)로 인식하는게 아니라,  -도 문자로 숫자도 문자로 인식해서 그걸 아스키코드로 인식하면 결국 -1보다 -4보다 작게 된다. 이점을 잊지말자. 

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 최솟값 만들기  (0) 2023.03.13
Programmers] N개의 최소공배수  (0) 2023.03.07
Programmers] 카드 뭉치  (0) 2023.02.28
Programmers] [1차] 비밀지도  (0) 2023.02.28
Programmers] 삼총사  (0) 2023.02.23

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

코니는 영어 단어가 적힌 카드 뭉치 두 개를 선물로 받았습니다. 코니는 다음과 같은 규칙으로 카드에 적힌 단어들을 사용해 원하는 순서의 단어 배열을 만들 수 있는지 알고 싶습니다.

  • 원하는 카드 뭉치에서 카드를 순서대로 한 장씩 사용합니다.
  • 한 번 사용한 카드는 다시 사용할 수 없습니다.
  • 카드를 사용하지 않고 다음 카드로 넘어갈 수 없습니다.
  • 기존에 주어진 카드 뭉치의 단어 순서는 바꿀 수 없습니다.

예를 들어 첫 번째 카드 뭉치에 순서대로 ["i", "drink", "water"], 두 번째 카드 뭉치에 순서대로 ["want", "to"]가 적혀있을 때 ["i", "want", "to", "drink", "water"] 순서의 단어 배열을 만들려고 한다면 첫 번째 카드 뭉치에서 "i"를 사용한 후 두 번째 카드 뭉치에서 "want"와 "to"를 사용하고 첫 번째 카드뭉치에 "drink"와 "water"를 차례대로 사용하면 원하는 순서의 단어 배열을 만들 수 있습니다.

문자열로 이루어진 배열 cards1, cards2와 원하는 단어 배열 goal이 매개변수로 주어질 때, cards1과 cards2에 적힌 단어들로 goal를 만들 있다면 "Yes"를, 만들 수 없다면 "No"를 return하는 solution 함수를 완성해주세요.

 

📌 제한 사항

  • 1 ≤ cards1의 길이, cards2의 길이 ≤ 10
    • 1 ≤ cards1[i]의 길이, cards2[i]의 길이 ≤ 10
    • cards1과 cards2에는 서로 다른 단어만 존재합니다.
  • 2 ≤ goal의 길이 ≤ cards1의 길이 + cards2의 길이
    • 1 ≤ goal[i]의 길이 ≤ 10
    • goal의 원소는 cards1과 cards2의 원소들로만 이루어져 있습니다.
  • cards1, cards2, goal의 문자열들은 모두 알파벳 소문자로만 이루어져 있습니다.

 

📌 입출력 예


추측) 

서로 다른 단어만 존재한다. 한번 사용한 카드는 두번 사용 불가. 카드를 사용하지 않고 다음 카드로 못 넘어감. 단어 순서 변화 불가. 

goal을 기준으로 for문을 돌려서 두가지 카드 뭉치 가장 처음과 비교해서 처음과 일치하면 Queue 방식으로 pop해서 제거

이런 방식으로 순서대로 카드 사용해서 없애고 goal 마지막 까지 일치하는 것을 확인해 Goal을 만들수 있는지 확인

 

소스코드) 

* 1차) 실패 : 88 점

def solution(cards1, cards2, goal):
    for one in goal:
        if len(cards1) != 0 and cards1[0] == one :
            cards1.pop(0)
        elif len(cards2) != 0 and cards2[0] == one :
            cards2.pop(0)

    if len(cards1) == 0 and len(cards2) == 0 :
        return "Yes"
    else :
        return "No"

* 2차) 성공

def solution(cards1, cards2, goal):
    for one in goal:
        if len(cards1) != 0 and cards1[0] == one :
            cards1.pop(0)
        elif len(cards2) != 0 and cards2[0] == one :
            cards2.pop(0)
        else :
            return "No"

    return "Yes"

 

리뷰) 

1차피드백)

카드를 꼭 다 쓸 필요없이 순서대로 원하는 Goal을 만들어 낼수만 있으면 됨

그러면 남은 카드 뭉치의 사이즈가 중요하지 않아지고, 만들 수 없는 순간을 체크해서 return하면 된다. 

Goal이 끝날때 까지 만들수 없는 순간이 없었다면 전부 만들 수 있는 거니 Yes!!

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] N개의 최소공배수  (0) 2023.03.07
Programmers] 최댓값과 최솟값  (0) 2023.03.06
Programmers] [1차] 비밀지도  (0) 2023.02.28
Programmers] 삼총사  (0) 2023.02.23
Programmers] 개인정보 수집 유효기간  (0) 2023.02.22

📌 파이썬 으로 풀이

 

📌 문제 링크 :

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제 설명 :

네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다행히 지도 암호를 해독할 방법을 적어놓은 메모도 함께 발견했다.

  1. 지도는 한 변의 길이가 n인 정사각형 배열 형태로, 각 칸은 "공백"(" ") 또는 "벽"("#") 두 종류로 이루어져 있다.
  2. 전체 지도는 두 장의 지도를 겹쳐서 얻을 수 있다. 각각 "지도 1"과 "지도 2"라고 하자. 지도 1 또는 지도 2 중 어느 하나라도 벽인 부분은 전체 지도에서도 벽이다. 지도 1과 지도 2에서 모두 공백인 부분은 전체 지도에서도 공백이다.
  3. "지도 1"과 "지도 2"는 각각 정수 배열로 암호화되어 있다.
  4. 암호화된 배열은 지도의 각 가로줄에서 벽 부분을 1, 공백 부분을 0으로 부호화했을 때 얻어지는 이진수에 해당하는 값의 배열이다.

네오가 프로도의 비상금을 손에 넣을 수 있도록, 비밀지도의 암호를 해독하는 작업을 도와줄 프로그램을 작성하라.

 

📌 제한 사항

입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.

  • 1 ≦ n ≦ 16
  • arr1, arr2는 길이 n인 정수 배열로 주어진다.
  • 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.

+ 출력 형식

원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.

 

📌 입출력 예


추측) 

arr1와 arr2를 for문을 돌려 같은 인덱스의 값을 가져온다.

이진수 이므로 2로 몫이 0이 될때까지 나머지를 차례차례 저장하고 역으로 정렬한다, 몫을 다시 대입하여 몫이 0이 나올때까지인 n번 반복

arr1과 arr2의 하나 인덱스 값을 각각 위처럼 처리하여 이진수 배열로 표현했으면

이 배열들을 가지고 for문을 돌려 각 arr1 나 arr2 이진수 배열의 인덱스 마다  하나라도 1이면 "#" 아니면 " " 공백처리

문자열에 인덱스마다 처리한 값을 더해주고 마지막 결과 배열에 append하여 모든 arr를 처리하고 반환한다. 

 

 

소스코드) 

* 1차) 성공

def solution(n, arr1, arr2):
    arr1_bi = []
    arr2_bi = []
    result_arr = []

    for i in range(n):

        for x in range(n) :
            arr1_bi.append(arr1[i] % 2)
            arr1[i] = int(arr1[i] / 2)

            arr2_bi.append(arr2[i] % 2)
            arr2[i] = int(arr2[i] / 2)

        arr1_bi.reverse()
        arr2_bi.reverse()

        result = ""
        for y in range(n) :
            if arr1_bi[y] == 0 and arr2_bi[y] == 0 :
                result += " "
            else:
                result += "#"

        result_arr.append(result)

        arr1_bi = []
        arr2_bi = []

    return result_arr

 

리뷰) 

추측대로 풀수 있었던 문제. 더 좋은 방법을 생각해 보는 것도 좋을듯!

비트연산자를 이용한 풀이해보기!

'Coding Test > Algorithm' 카테고리의 다른 글

Programmers] 최댓값과 최솟값  (0) 2023.03.06
Programmers] 카드 뭉치  (0) 2023.02.28
Programmers] 삼총사  (0) 2023.02.23
Programmers] 개인정보 수집 유효기간  (0) 2023.02.22
Programmers] 신고 결과 받기  (0) 2023.02.22

+ Recent posts