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

 

프로그래머스

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

programmers.co.kr

 

카이사르 암호를 응용한 문제입니다. skip에 포함된 알파벳은 넘긴 횟수로 세지 않는것과 z 다음이 a인것만 주의하고,

ord()와 chr() 같은 Python 내장 함수를 사용하면 쉽게 풀 수 있습니다. 

 

def solution(s, skip, index):
    answer = ''
    
    for c in s:
        i = ord(c)
        j = index
        while j > 0:
            i += 1
            if i > ord('z'):
                i = ord('a')
            if chr(i) in skip:
                j += 1
            j -= 1
        answer += chr(i)
    
    return answer
728x90

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

 

프로그래머스

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

programmers.co.kr

 

아주 간단한 set, map을 활용하는 기본 문제입니다.

name과 yearning을 순회하며 name을 key로 추억점수를 저장하고, photo[i]마다 추억점수가 존재하는 이름이라면 그 값을 합해주면 쉽게 풀립니다.

 

def solution(name, yearning, photo):
    answer = []
    m = {}
    for i in range(len(name)):
        m[name[i]] = yearning[i]
    
    for pho in photo:
        s = 0
        for p in pho:
            if p in m:
                s += m[p]
        answer.append(s)
    return answer
728x90

 

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

 

프로그래머스

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

programmers.co.kr

set, map 등의 hash 자료구조를 이용해 풀이했습니다. 아주 효율적인 코드는 아니지만 시간 내에 잘 돌아갑니다.

 

접근 아이디어는 선수의 이름과 현재 등수가 서로를 양방향으로 지목해 바꿉니다. 어떤 선수의 이름이 불린다면, 그 선수의 등수를 알게 되고, 그 선수의 앞 등수를 알게 되어 이름을 알게되는 구조입니다.

등수와 이름을 모두 안다면 호명된 선수와 앞 선수의 순위를 바꾸어 갱신하면 됩니다.

 

def solution(players, callings):
    n = len(players)
    
    ranking = []
    idxset = {}
    for i in range(n):
        ranking.append(players[i])
        idxset[players[i]] = i
    
    for c in callings:
        t = idxset[c]
        f = ranking[t - 1]
        
        ranking[t - 1] = c
        ranking[t] = f
        
        idxset[c] = t - 1
        idxset[f] = t
        
    return ranking

 

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

구현할게 많아 귀찮은(?) 문제입니다.

index를 밀어가면서 주어진 4개의 문자열이 나오는지를 확인해주면 되고, 연속해서 쓰이지 않도록 이전 문자열을 기억해줘야 합니다. 조건을 만족하지 못하거나 문자열을 전부 탐색해서 성공했을때 반복문을 끝내는 부분만 신경쓰면 어렵지 않게 풀립니다.

 

def solution(babbling):
    answer = 0

    for b in babbling:
        idx = 0
        flag = -1
        while idx < len(b):
            if b[idx] == 'a':
                if flag != 0 and idx + 2 < len(b) and b[idx+1] == 'y' and b[idx + 2] == 'a':
                    flag = 0
                    idx += 3
                else:
                    flag = -1
                    break
            elif b[idx] == 'y':
                if flag != 1 and idx + 1 < len(b) and b[idx+1] == 'e':
                    flag = 1
                    idx += 2
                else:
                    flag = -1
                    break
            elif b[idx] == 'w':
                if flag != 2 and idx + 2 < len(b) and b[idx+1] == 'o' and b[idx + 2] == 'o':
                    flag = 2
                    idx += 3
                else:
                    flag = -1
                    break
            elif b[idx] == 'm':
                if flag != 3 and idx + 1 < len(b) and b[idx+1] == 'a':
                    flag = 3
                    idx += 2
                else:
                    flag = -1
                    break
            else:
                flag = -1
                break

        if flag != -1:
            answer += 1

    return answer

print(solution(	["ayaye", "uuu", "yeye", "yemawoo", "ayaayaa"]))

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

일주일 공부를 안한 사이에 또 문제가 추가되었다.

열일하는 프로그래머스 화이팅~

 

 

기본적인 Stack 응용 문제인것 같은데, 사실 그닥 스택 느낌이 없다. 문제 설명도 뭔가 부족한 느낌... 처음엔 가능한 만큼 햄버거를 계속 만드는줄 알았는데 그런거 없더라.

아무튼, Python엔 Stack이 없기 때문에 List를 하나 만들어 주고, 적절히 탐색해가면서 만들어지는 햄버거의 갯수를 카운팅하면 쉽게 풀린다.

 

def solution(ingredient):
    answer = 0
    remain = []

    for i in ingredient:
        if i == 1 and len(remain) >= 3 and remain[-1] == 3 and remain[-2] == 2 and remain[-3] == 1:
            for _ in range(3):
                remain.pop()
            answer += 1
        else:
            remain.append(i)

    return answer

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

Java로 푼 문제를 Python으로 다시 작성한 문제입니다.
풀이방법과 주의사항, Java 정답 코드를 보고 싶으신 분은 아래 링크를 확인해주세요!

https://nodingco.tistory.com/198

 

[Java] 프로그래머스 12941. 최솟값 만들기 (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/12941 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞..

nodingco.tistory.com

 

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
728x90

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

 

프로그래머스

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

programmers.co.kr

 

배열 두개의 원소를 하나씩 뽑아 곱해 합을 가장 작게 만드는 문제입니다.

풀이 아이디어부터 말하자면, 두 배열을 정렬해 큰수 - 작은수를 순서대로 짝을 맞춰주면 됩니다. 증명이 떠오르지 않더라도 이렇게 하지 않으면 안된다는 사실은 쉽게 떠올릴 수 있습니다.

 

예를 들어 작은 수 a, 큰 수 A가 있고 작은 수 b, 큰 수 B가 있다고 해봅시다.

a보다 큰 수 A는 두 수의 차이를 n이라고 하면 a + n으로 생각할 수 있습니다. 마찬가지로 B는 b + m으로 생각할 수 있습니다.

작은수 - 큰수 쌍으로 곱한다면, ab + am + ab + bn이 됩니다. 만약 이 순서를 지키지 않고 곱한다면 ab + ab + am + bn + mn이 됩니다. 즉 A와 B가 a와 b보다 큰 mn 만큼 합이 커지게 됩니다. 따라서 작은수가 큰 수와 짝을 이루게 곱해야 더 작은 합이 됩니다.

(제가 수학 전공이 아니기 때문에 수학적 증명은 틀릴 수도 있습니다.)

 

두 배열을 오름차순 / 내림차순으로 정렬을 해 곱해도 되고, 길이가 같기 때문에 둘 다 오름차순으로 정렬해 앞과 뒤에서부터 곱해주어도 됩니다.

 

import java.util.*;

class Solution
{
    public int solution(int []A, int []B)
    {
        int answer = 0;

        Arrays.sort(A);
        Arrays.sort(B);
        
        for(int i = 0; i < A.length; i++){
            answer += A[i] * B[B.length - i - 1];
        }

        return answer;
    }
}

 

 

728x90

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

 

프로그래머스

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

programmers.co.kr

Java로 푼 문제를 Python으로 다시 작성한 문제입니다.
풀이방법과 주의사항, Java 정답 코드를 보고 싶으신 분은 아래 링크를 확인해주세요!

https://nodingco.tistory.com/196

 

[Java] 프로그래머스 12909. 올바른 괄호 (Lv.2)

https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞..

nodingco.tistory.com

 

def solution(s):
    count = 0
    for b in s:
        if b == '(':
            count += 1
        else:
            count -= 1
        if count < 0:
            return False

    return True if count == 0 else False

 

728x90

+ Recent posts