ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8.10.목요일 코딧 강의 & 프로그래머스 문제 복습
    TIL( Today I Learned) 2023. 8. 10. 23:03

    허겁지겁 정신없이 풀었던 프로그래머스 문제를 다시 천천히 음미하면서 풀고 있다. 재미있다. 재미있다.

    코딧 강의 아직도 웹 자동화 하고 있다. 많이 속도를 내야한다.

     

    8.10

    • 1.진료 순서 정하기

    • 문제 설명

    외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다.

    정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

    제한사항

    • 중복된 원소는 없습니다.
    • 1 ≤ emergency의 길이 ≤ 10
    • 1 ≤ emergency의 원소 ≤ 100

     

    입출력 예

    emergency result
    [3, 76, 24] [3, 1, 2]
    [1, 2, 3, 4, 5, 6, 7] [7, 6, 5, 4, 3, 2, 1]
    [30, 10, 23, 6, 100] [2, 4, 3, 5, 1]

    입출력 예 설명

    입출력 예 #1

    • emergency가 [3, 76, 24]이므로 응급도의 크기 순서대로 번호를 매긴 [3, 1, 2]를 return합니다.

    입출력 예 #2

    • emergency가 [1, 2, 3, 4, 5, 6, 7]이므로 응급도의 크기 순서대로 번호를 매긴 [7, 6, 5, 4, 3, 2, 1]를 return합니다.

    입출력 예 #3

    • emergency가 [30, 10, 23, 6, 100]이므로 응급도의 크기 순서대로 번호를 매긴 [2, 4, 3, 5, 1]를 return합니다.

    내가 한거

    def solution(emergency): 

    b =sorted(a,reverse = True)

    an1 =[]

     

    for i in a:

      an1.append(b.index(i)+1)

     

    return an1

     

    def solution(emergency):

        # 응급도가 높은 순서대로 정렬

        sorted_emergency = sorted(emergency, reverse=True)

        # 해당 원소의 인덱스를 저장할 리스트 초기화

        result = [0] * len(emergency)

        # 각 원소의 인덱스 찾아서 저장

        for i in range(len(emergency)):

            result[i] = sorted_emergency.index(emergency[i]) + 1

        return result

     

     

     

     

    중요 남이 한거 ? 왜 딕셔너리 사용 - 난 낮선 부분

     

    def solution(emergency):

        answer = []

        emer_ls = {e: i + 1 for i, e in enumerate(sorted(emergency)[::-1])}

    이렇게 나온다 {100 : 1,  30: 2,  23: 3,  10:4,  6: 5} ,:딕셔너리 중요

        for e in emergency:

            answer.append(emer_ls[e])

        return answer

     

    이 코드는 'emergency'라는 리스트를 입력으로 받아 처리하는 함수인 'solution'을 정의하고 있습니다.

    • emer_ls 딕셔너리 생성: 먼저, 주어진 'emergency' 리스트를 내림차순으로 정렬하고, 각 원소와 그 인덱스를 emer_ls 딕셔너리에 저장합니다. 이 때, 인덱스는 1부터 시작하는 순번으로 저장됩니다. 이렇게 하는 이유는 나중에 'emergency' 리스트의 각 원소에 해당하는 순번을 빠르게 찾을 수 있도록 하기 위함입니다.
    • 'answer' 리스트 생성: 'emergency' 리스트를 반복하면서 각 원소에 대응하는 순번을 'emer_ls' 딕셔너리에서 찾아서 'answer' 리스트에 추가합니다.
    • 'answer' 반환: 모든 'emergency' 원소에 대해 순번을 찾아 'answer' 리스트에 저장한 후, 최종적으로 'answer' 리스트를 반환합니다.

    이 함수는 'emergency' 리스트 내 각 원소에 대해 해당하는 순번을 찾아 순번들을 담은 리스트를 반환하는 기능을 수행합니다.

     

     

     

     

     

     

     

     

    • 2.간단한 논리 연산
    •  

    문제 설명

    boolean 변수 x1, x2, x3, x4가 매개변수로 주어질 때, 다음의 식의 true/false를 return 하는 solution 함수를 작성해 주세요.

    • (x1  x2) (x3  x4)

     

    입출력 예

    x1 x2 x3 x4 result
    false true true true true
    true false false false false

    입출력 예 설명

    입출력 예 #1

    • 예제 1번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.
      (x1  x2) (x3  x4) ≡ (F T) (T T) ≡ T T ≡ T
      따라서 true를 return 합니다.

    입출력 예 #2

    • 예제 2번의 x1, x2, x3, x4로 식을 계산하면 다음과 같습니다.
      (x1  x2) (x3  x4) ≡ (T F) (F F) ≡ T F ≡ F
      따라서 false를 return 합니다.

     

    이전 보다는 좀 짧아 졌다. 

    def solution(x1, x2, x3, x4):

        if(x1 or x2):

            if(x3 or x4):

                   return True

            else:

                return False

        else:

            return False

     

    이전것

     

    def solution(x1, x2, x3, x4):

        answer = True

        if (x1 or x2) == True:

            if (x3 or x4)== True:

                answer = True

            else: 

                answer =False

        else:

            answer =False

               

                

        return answer

     

    남의 것

    def solution(x1, x2, x3, x4):

        return (x1 | x2) & (x3 | x4)

     

     

     

    • 3.문자열 반복해서 출력하기

     

    문제 설명

    문자열 str과 정수 n이 주어집니다.
    str이 n번 반복된 문자열을 만들어 출력하는 코드를 작성해 보세요.

     

    제한사항

    • 1 ≤ str의 길이 ≤ 10
    • 1 ≤ n ≤ 5

     

     

    a, b = input().strip().split(' ')

    b = int(b)

    print(a*b)

     

    남의것

    a, b = input().strip().split(' ')

    for i in range(int(b)):

        print(a, end = "")

     

     

    • 4.1로 만들기

     

    문제 설명

    정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.

    • 10 / 2 = 5
    • (5 - 1) / 2 = 4
    • 4 / 2 = 2
    • 2 / 2 = 1

    위와 같이 4번의 나누기 연산으로 1이 되었습니다.

    정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.

     

    제한사항

    • 3 ≤ num_list의 길이 ≤ 15
    • 1 ≤ num_list의 원소 ≤ 30

     

    def solution_num_divi(num):

        count = 0

        while num != 1:

            if num % 2 == 0:

                num /= 2

            else:

                num -= 1

                num /= 2

            count += 1

        return count

     

    def solution(num_list):

        count = 0

        for num in num_list:

            result = solution_num_divi(num)

            count += result

        return count

     

     

     

    def solution(numlist):

        def solution_num_cnt(num):

            count =0

            while num !=1:

                if num%2 == 0:

                    num /= 2

                else:

                    num -= 1

                    num /=2

                count +=1

            return count

        result = 0

        for num in numlist:

            result += solution_num_cnt(num)

        return result

     

     

    def solution(num_list):

        return sum(len(bin(i)) - 3 for i in num_list)

     

    Best

    def solution(num_list):

        answer = 0

     

        for n in num_list:

            while n != 1:

                n //= 2

                answer += 1

     

        return answer

     

     

    • 5.한 번만 등장한 문자

     

    문제 설명

    문자열 s가 매개변수로 주어집니다. 

    s에서 한 번만 등장하는 문자를 사전 순으로 정렬한 문자열을 return 하도록

     solution 함수를 완성해보세요. 

    한 번만 등장하는 문자가 없을 경우 빈 문자열을 return 합니다.

     

    제한사항

    • 0 < s의 길이 < 1,000
    • s는 소문자로만 이루어져 있습니다.

     

    입출력 예

    s result
    "abcabcadc" "d"
    "abdc" "abcd"
    "hello" "eho"

    입출력 예 설명

    입출력 예 #1

    • "abcabcadc"에서 하나만 등장하는 문자는 "d"입니다.

    입출력 예 #2

    • "abdc"에서 모든 문자가 한 번씩 등장하므로 사전 순으로 정렬한 "abcd"를 return 합니다.

    입출력 예 #3

    • "hello"에서 한 번씩 등장한 문자는 "heo"이고 이를 사전 순으로 정렬한 "eho"를 return 합니다.

     

    def solution(s):

        x =[]

        for k in s:

            if s.count(str(k))==1:

                    x += [str(k)]

            else: 

                 pass

        x1 = sorted(x)

        x2 =''.join(x1)

     

        return x2

     

     

    def solution(s):

        an =''

        for i in s:

            if s.count(i) ==1 :

                an += i

        ans1 = list(an)

        ans2 = sorted(ans1)

        ans3 = ''.join(ans2)

        return ans3

     

     

    def solution(s):

        answer = "".join(sorted([ ch for ch in s if s.count(ch) == 1]))

        return answer

     

    • 6.배열의 길이를 2의 거듭제곱으로 만들기
    •  

    문제 설명

    정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. 

    arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.

     

    제한사항

    • 1 ≤ arr의 길이 ≤ 1,000
    • 1 ≤ arr의 원소 ≤ 1,000

     

    입출력 예

    arr result
    [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0]
    [58, 172, 746, 89] [58, 172, 746, 89]

    입출력 예 설명

    입출력

     예 #1

    ** 예제 1번의 arr의 길이는 6입니다. arr의 길이를 2의 정수 거듭제곱으로 만드는 방법은 0을 2개, 10개, 26개,..., 

    추가하는 방법이 있고 그중 최소한으로 0을 추가하는 방법은 2개를 추가하는 것입니다. 따라서 [1, 2, 3, 4, 5, 6, 0, 0]을 return 합니다.

    입출력 예 #2

    ** 예제 2번의 arr의 길이는 4이고 이미 2의 정수 거듭제곱입니다. 따라서 뒤에 0을 추가하지 않아도 되므로 [58, 172, 746, 89]를 return 합니다.

     

    def solution(arr):

        z2 =[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

        

    #print(z2)

        n=len(arr)

    #print(n)

    #for i,vl in enumerate(arr):

       # j = i+1

      #print(j)

     # print(j,vl)

        count = 0

        for i in z2: #2의 제곱수들을 반복해서 왜 그래야 i 랑 len(arr)이랑 비교

            if n > i: # 5>1 (1), 2(2), 4(3),,,8

                count +=1

            else:

                break

        result = count

     

        diff = 2**(count) - n

        for _ in range(diff):

            arr +=[0]

     

     

        return arr

      

    새로 내가 한거  // 저번 보다 잘 풀었다

    def solution(arr):

        nar = len(arr)

        idx = 0

        while nar > 2**idx:

            idx +=1

        a = (2**idx ) - nar 

        

        for _ in range(a):

            arr += [0]

     

        return arr

     

    남의 답

    def solution(arr):

        a = 1

        b = len(arr)

        while a < b :

            a *= 2

        return arr + [0] * (a-b)

     

     

     

    • 7.문자열이 몇 번 등장하는지 세기

    • 문제 설명

    문자열 myString과 pat이 주어집니다. myString에서 pat이 등장하는 횟수를 return 하는 solution 함수를 완성해 주세요.

     

    제한사항

    • 1 ≤ myString ≤ 1000
    • 1 ≤ pat ≤ 10

     

    입출력 예

    myString pat result
    "banana" "ana" 2
    "aaaa" "aa" 3

    입출력 예 설명

    입출력 예 #1

    • "banana"에서 1 ~ 3번 인덱스에서 한 번, 3 ~ 5번 인덱스에서 또 한 번 "ana"가 등장해서 총 두 번 등장합니다. 따라서 2를 return 합니다.

    입출력 예 #2

    • "aaaa"에서 0 ~ 2번 인덱스에서 한 번, 1 ~ 3번 인덱스에서 한 번, 2 ~ 4번 인덱스에서 한 번 "aa"가 등장해서 총 세 번 등장합니다. 따라서 3을 return 합니다.

     

     

     

    내가 새로 푼거

    def solution(myString,pat):

        count =0

        lnpt = len(pat)

        for i in range(len(myString)):

            if myString[i:i+lnpt] == pat:

                count +=1

        return count

     

    예전거

     

    def solution(myString, pat):

     

        num = len(pat)

        count = 0

        for i in range(len(myString)):

            if myString[i:i+num] == pat:

                count +=1

        return count

     

    다른 사람

     

    def solution(myString, pat):

        answer = 0

        for i, x in enumerate(myString) :

            if myString[i:].startswith(pat) :

                answer += 1

        return answer

     

    • 8.세 개의 구분자

     

    문제 설명

    임의의 문자열이 주어졌을 때 문자 "a", "b", "c"를 구분자로 사용해 문자열을 나누고자 합니다.

    예를 들어 주어진 문자열이 "baconlettucetomato"라면 나눠진 문자열 목록은 ["onlettu", "etom", "to"] 가 됩니다.

    문자열 myStr이 주어졌을 때 위 예시와 같이 "a", "b", "c"를 사용해 나눠진 문자열을 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

    단, 두 구분자 사이에 다른 문자가 없을 경우에는 아무것도 저장하지 않으며, return할 배열이 빈 배열이라면 ["EMPTY"]를 return 합니다.

     

    제한사항

    • 1 ≤ myStr의 길이 ≤ 1,000,000

     

     

    입출력 예

    myStr result
    "baconlettucetomato" ["onlettu", "etom", "to"]
    "abcd" ["d"]
    "cabab" ["EMPTY"]

    입출력 예 설명

    입출력 예 #1

    • 문제 설명의 예시와 같습니다.

    입출력 예 #2

    • "c" 이전에는 "a", "b", "c" 이외의 문자가 없습니다.
    • "c" 이후에 문자열 "d"가 있으므로 "d"를 저장합니다.
    • 따라서 ["d"]를 return 합니다.

    입출력 예 #3

    • "a", "b", "c" 이외의 문자가 존재하지 않습니다. 따라서 저장할 문자열이 없습니다.
    • 따라서 ["EMPTY"]를 return 합니다.

     

    연습

    ls =[]

    ms =''

    for i in "kbeauti": 

        if i  not in ["a", "b", "c"]:

            ms += i

             

        else:

            if ms:

              ls.append(ms)

              ms =''

    if ms:

        ls.append(ms)

    print(ls)

     

    이전거

    def solution(myStr):

        # Initialize variables

        result = []

        current_str = ""

        delimiters = {"a", "b", "c"}

     

        # Loop through each character in the input string

        for char in myStr:

            if char in delimiters:

                if current_str:

                    result.append(current_str)

                current_str = ""

            else:

                current_str += char

     

        # Append the last substring (if any)

        if current_str:

            result.append(current_str)

     

        # Check if the result list is empty and return ["EMPTY"] in that case

        if not result:

            result = ["EMPTY"]

     

        return result

     

    새로 한거

    def solution(myStr): 

        ls =[]

        ms =''

        for i in myStr:

            if i not in ['a','b','c']:

                ms += i

            else:

                if ms:

                    ls.append(ms)

                    ms = ''

        if ms:

            ls.append(ms)

        

        else:                                             —> if not ls:

            if ms=="" and ls==[]:            —> 이것 하나로 된다

                ls = ["EMPTY"]                         ls = ["EMPTY"]

        return ls                                             return ls

                    

     

     

     

     

     

Designed by Tistory.