[1일 3알고리즘] Day4

    728x90

    1. 삼총사

    https://school.programmers.co.kr/learn/courses/30/lessons/131705

     

    프로그래머스

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

    programmers.co.kr

    def solution(number):
        sol = 0
        for i in range(len(number)):
            for j in range(i+1, len(number)):
                for k in range(j+1, len(number)):
                    if (number[i] + number[j] + number[k]) == 0:
                        sol += 1
        return sol

    문제 풀이

    생각해낸 풀이가 O(n^3)이라서 코테에 적절하지 않은 것 같다는 생각을 했다. (통과된 걸 보면 이걸 의도한게 맞는거 같긴 한데..) 지피티한테 물어봤을때는 해시나 투포인트 기법을 쓸 수도 있다 라고는 하는데 제시해준 코드가 틀려서 위 풀이가 맞는 거 같다.

     

     

    2. 숫자 문자열과 영단어

    https://school.programmers.co.kr/learn/courses/30/lessons/81301

     

    프로그래머스

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

    programmers.co.kr

    처음에는 아래처럼 풀었다.

    def solution(s):
        while(s.isnumeric() == False):
            if "one" in s:
                s = s.replace("one", "1")
            if "two" in s:
                s = s.replace("two", "2")
            if "three" in s:
                s = s.replace("three", "3")
            if "four" in s:
                s = s.replace("four", "4")
            if "five" in s:
                s = s.replace("	five", "5")
            if "six" in s:
                s = s.replace("six", "6")
            if "seven" in s:
                s = s.replace("seven", "7")
            if "eight" in s:
                s = s.replace("eight", "8")
            if "nine" in s:
                s = s.replace("nine", "9")
            if "zero" in s:
                s = s.replace("zero", "0")
        return int(s)

    그리고 시간초과!.. 근데 while을 빼니까

    def solution(s):
        s = s.replace("one", "1")
        s = s.replace("two", "2")
        s = s.replace("three", "3")
        s = s.replace("four", "4")
        s = s.replace("five", "5")
        s = s.replace("six", "6")
        s = s.replace("seven", "7")
        s = s.replace("eight", "8")
        s = s.replace("nine", "9")
        s = s.replace("zero", "0")
        return int(s)

    성공! (if문은 디버깅 해보니 없어도 될 것 같아서 제거!)

    dic = {"zero": "0", "one": "1", "two": "2", "three": "3", "four": "4", "five": "5", "six": "6", "seven": "7",
           "eight": "8", "nine": "9"}
    
    
    def solution(s):
        for key, value in dic.items():
            s = s.replace(key, value)
        return int(s)

    게시판의 다른 솔루션을 보니 이런 방식이 훨씬 간단한 것 같다.

     

    3.  [1차] 비밀지도

    def solution(n, arr1, arr2):
        mapArr1 = []
        mapArr2 = []
        ansArr = []
        ans = []
        for i in range(n):
            mapArr1 = sliceArr(arr1, i, n)
            mapArr2 = sliceArr(arr2, i, n)
            for j in range(n):
                if mapArr1[j] == '0' and mapArr2[j] == '0':
                    ansArr.append(' ')
                else:
                    ansArr.append('#')
            ans.append(''.join(ansArr))
            ansArr.clear()
    
        return ans
    
    def sliceArr(arr, i, n):
        dec = bin(arr[i])[2:]  # 0100
        mapArr = list(dec)
        while len(mapArr) != n:
            mapArr.insert(0, '0')
        return mapArr

    문제 풀이

     

    'Algorithm' 카테고리의 다른 글

    [1일 3알고리즘] Day6  (0) 2024.04.18
    [1일 3알고리즘] Day5  (0) 2024.04.17
    [1일 3알고리즘] Day3  (0) 2024.04.15
    [1일 3알고리즘] Day2  (0) 2024.04.12
    [1일 3알고리즘] Day1  (0) 2024.04.11

    댓글