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

 

프로그래머스

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

programmers.co.kr

keymap을 돌며 각 알파벳 별로 키보드를 눌러야 하는 최소 횟수를 기록한 뒤 target의 알파벳 하나씩 필요한 횟수를 누적합해주고, 불가능한 경우가 있으면 바로 -1을 넣어주면 됩니다.

각 알파벳 별 최소 횟수는 set, map 등의 자료구조나 알파벳의 ASCII를 이용한 배열로 저장할 수 있습니다.

 

def solution(keymap, targets):
    answer = []
    keyset = {}
    
    for key in keymap:
        for i in range(len(key)):
            if key[i] not in keyset or keyset[key[i]] > i:
                keyset[key[i]] = i + 1

    for target in targets:
        n, f = 0, True
        for t in target:
            if t not in keyset:
                answer.append(-1)
                f = False
                break
            n += keyset[t]
        if f:
            answer.append(n)
    
    return answer
728x90

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/12951

 

프로그래머스

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

programmers.co.kr

 

문자열의 단어 시작을 관리하고 첫 스펠링만 대문자로, 나머지는 소문자로 만드는 문제입니다. 

공백문자가 여러번 나올 수 있기 때문에 boolean으로 공백문자를 만날때 마다 새로운 단어로 판단하도록 체크했습니다.

대문자와 소문자 변환은 ascii 값을 이용했는데, 언어에서 제공하는 내부 메소드를 사용해도 간편하게 풀 수 있습니다.

 

class Solution {
    public String solution(String s) {
        char[] cArr = s.toCharArray();
        boolean flag = false;
        for(int i = 0; i < cArr.length; i++) {
            if(!flag && 97 <= (int)cArr[i] && (int)cArr[i] <= 122) {
                cArr[i] = (char)((int)cArr[i] - 32);
            }else if(flag && 65 <= (int)cArr[i] && (int)cArr[i] <= 90) {
                cArr[i] = (char)((int)cArr[i] + 32);
            }

            if(cArr[i] == ' ') {
                flag = false;
            }else {
                flag = true;
            }
        }

        return new String(cArr);
    }
}

 

728x90

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

 

프로그래머스

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

programmers.co.kr

 

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

https://nodingco.tistory.com/193

 

[Java] 프로그래머스 12939. 최댓값과 최솟값 (Lv.2)

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

nodingco.tistory.com

 

def solution(s):
    minn = float("inf")
    maxn = -float("inf")
    number = list(s.split(' '))

    for num in number:
        n = int(num)

        minn = min(n, minn)
        maxn = max(n, maxn)

    return f"{minn} {maxn}"
728x90

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

 

프로그래머스

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

programmers.co.kr

 

문자열을 쪼개고 최댓값, 최솟값 관련 메소드를 알면 쉽게 풀 수 있는 문제입니다. 

예전 문제라 Lv2이고 요즘 코딩 테스트 난이도로는 Lv1이 맞을것 같네요.

 

import java.util.StringTokenizer;

class Solution {
    public String solution(String s) {
        StringTokenizer st = new StringTokenizer(s);
        String answer = "";
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;

        while(st.hasMoreElements()) {
            int n = Integer.parseInt(st.nextToken());
            min = Math.min(min, n);
            max = Math.max(max, n);
        }
        return Integer.toString(min) + " " + Integer.toString(max);
    }
}
728x90

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

 

프로그래머스

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

programmers.co.kr

 

비트연산과 이진수를 구하는 법만 알면 쉽게 풀리는 문제입니다.

 

arr1과 arr2의 수에서, 두 이진수를 겹친다는것은 | , 즉 or 비트연산을 한다는 뜻입니다.

or 비트 연산으로 수를 바꿔주고 이진수를 구하듯 나누어 주면 됩니다. (위 코드)

또는 1을 shift 해가면서 & and 비트연산으로 해당 위치에 비트가 있는지 체크해주면 됩니다. (아래 코드)

 

구현에 큰 차이는 없고 만들어진 배열을 뒤집어서 출력만 하면 됩니다.

또는 문자열로 덧붙여 만들고 slice로 뒤집어줘도 됩니다.

 

 

def solution(n, arr1, arr2):
    answer = []

    for i in range(n):
        arr1[i] = arr1[i] | arr2[i]

    for i in range(n):
        num = n
        temp = []
        while num > 0:
            if arr1[i] % 2 == 1:
                temp.append("#")
            else:
                temp.append(" ")

            arr1[i] //= 2
            num -= 1
            
 #         temp = ""
#         while num > 0:
#             if arr1[i] % 2 == 1:
#                 temp += "#"
#             else:
#                 temp += " "

#             arr1[i] //= 2
#             num -= 1
#         answer.append(temp[::-1])

        answer.append(''.join(temp.__reversed__()))

    return answer

 

 

def solution(n, arr1, arr2):
    answer = []

    for i in range(n):
        arr1[i] = arr1[i] | arr2[i]

    for i in range(n):
        num = 1
        temp = []
        for j in range(n):
            if arr1[i] & (1 << j) != 0:
                temp.append("#")
            else:
                temp.append(" ")
                
#         temp = ""
#         for j in range(n):
#             if arr1[i] & (1 << j) != 0:
#                 temp += "#"
#             else:
#                 temp += " "
        
#         answer.append(temp[::-1])
        
        answer.append(''.join(temp.__reversed__()))

    return answer
728x90

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

 

프로그래머스

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

programmers.co.kr

 

기본적인 인덱스 관리와 문자열 다루기를 안다면 풀 수 있는 문제입니다.

아이디어는 간단합니다. 단어별 인덱스와 문장의 전체 인덱스를 따로 관리해줍니다.

 

공백을 만난다면 단어가 끝났음을 의미하기 때문에 단어별 인덱스를 0으로 초기화 시켜줍니다.

공백이 아니라면? 홀짝에 따라 upper(), lower()를 사용해서 대소문자를 바꾸면서 단어별 인덱스를 1씩 늘려주면 됩니다.

문장의 인덱스는 모든 과정마다 늘려줍니다.

 

문제에서 짝수번째, 홀수번째의 설명이 좀 애매한데, 우리가 알고 있는 배열의 index처럼 0번째 부터 시작한다고 이해하면 예시케이스와 같이 진행됩니다. 

 

def solution(s):
    msg = list(s)

    idx = 0

    for i in range(len(msg)):
        if msg[i] == " ":
            idx = 0
        elif idx % 2 == 0:
            msg[i] = msg[i].upper()
            idx += 1
        else:
            msg[i] = msg[i].lower()
            idx += 1

    return ''.join(msg)
728x90

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

 

프로그래머스

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

programmers.co.kr

 

단어의 길이가 짝수 / 홀수인 경우에 어떤 글자를 반환할지 잘 생각해보면 쉽게 풀 수 있습니다.

 

def solution(s):
    c = len(s) // 2
    
    if len(s) % 2 == 0:
        return s[c - 1: c + 1]
    else :
        return s[c]
728x90

+ Recent posts