반응형

 

안녕하세요 Henry 입니다

오늘은 자릿수 더하기 라는 문제를 풀어보았습니다.
프로그래머스에서 Level 별로 문제 난이도가 정해져 있는데,
이 문제는 Level 1에 속해있는 문제입니다.

 

숫자 -> 문자로 치환하여 index 접근을 한다면, 자릿수에 조금 더 편하게 접근이 가능하실 것으로 보입니다.ㅎㅎ

 

아래는 저의 코드입니다.

def solution(n):
    str_n = str(n)
    
    current_value = 0
    for s in str_n:
        current_value += int(s)

    return current_value

 

문제에 대한 강의 영상입니다.

https://youtu.be/PDxkY0QIYlI

 

반응형
반응형


안녕하세요 Henry 입니다

오늘은 이진 변환 반복하기 라는 문제를 풀어보았습니다.
프로그래머스에서 Level 별로 문제 난이도가 정해져 있는데,
이 문제는 Level 2에 속해있는 문제입니다.

먼저 이진 변환하는 방법을 알아야 하고,
숫자로 되어있는 문자열에서 0을 제거하는 방법을 알아야 합니다.

저는 문자열을 리스트로 변환해서 문제를 풀었는데,
또 0과 1만 이루어져 있기 때문에, 값을 모두 더하는 것을 1의 개수로 보는 것도 참 좋은 방법일 것 같습니다.

아래는 제가 푼 소스입니다.
코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

from typing import List

def solution(s: str) -> List[int]:
    zero_count_list = list()
    while True:
        ls = list(s)
        zero_count_list.append(sorted(ls).index('1'))
        value = len(ls) - zero_count_list[-1]
        s: str = binary_tranform(value)
        if s == '1':
            break
            
    return [len(zero_count_list), sum(zero_count_list)]



def binary_tranform(value: int) -> str:
    remainder_string = ''
    while True:
        value, remainder = divmod(value, 2)
        remainder_string = str(remainder) + remainder_string
        if value == 0:
            break
    return remainder_string


아래는 문제 풀이 영상입니다.
https://youtu.be/YdVfhz1WSl4

 

- YouTube

 

www.youtube.com

 

반응형
반응형

안녕하세요 Henry입니다!

 

오늘은 if라는 문법을 사용한 풀이를 요구하는 문제를 풀어보았습니다.

if는 일반적으로 분기를 나눌때 우리가 주로 사용하는 문법이죠?

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num):
    return "Even" if num%2 == 0 else "Odd"

 

아래는 문제 풀이 영상입니다.

https://youtu.be/xLceLn_IDJM

 

- YouTube

 

www.youtube.com

 

반응형
반응형

 

안녕하세요 Henry입니다!

 

오늘은 간단한 사칙연산 중 뺄셈에 대한 풀이를 요구하는 문제를 풀어보았습니다.

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num1: int, num2: int) -> int:
    return num1 * num2

 

아래는 문제 풀이 영상입니다.

https://youtu.be/YA1ezTHYs0Y

 

반응형
반응형

 

안녕하세요 Henry입니다!

 

오늘은 간단한 사칙연산 중 뺄셈에 대한 풀이를 요구하는 문제를 풀어보았습니다.

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num1: int, num2: int) -> int:
    return num1 - num2

 

아래는 문제풀이 영상입니다.

https://youtu.be/yBQGiVZeJRs

 

- YouTube

 

www.youtube.com

 

반응형
반응형

 

안녕하세요 Henry입니다!

 

오늘은 간단한 사칙연산 중 덧셈에 대한 풀이를 요구하는 문제를 풀어보았습니다.

 

특별히 타입힌팅에 대한 간략한 예시도 함께 넣어놓았는데요.

 

코드 보시면서 도움이 되시길 바랍니다ㅎㅎ

 

def solution(num1: int, num2: int) -> int:
    return num1 + num2

 

아래는 문제 풀이 영상입니다.

https://youtu.be/jPtpqa3ApP8

 

- YouTube

 

www.youtube.com

 

반응형
반응형

 

스타의 풀이

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer

 

나의 코드

from dataclasses import dataclass
from typing import List, TypeVar

T = TypeVar('T')

@dataclass
class User:
    id: str
    targets: List[T]
    report_count: int = 0
    
    def __init__(self, id):
        self.id = id
        self.targets = list()
    
    def report_count_increment(self):
        self.report_count += 1
        
    def append_target(self, user: T):
        self.targets.append(user)
        
    def is_out(self, k: int) -> bool:
        if self.report_count >= k:
            return True
        return False
    


def solution(id_list, report, k):
    answer = []
    
    users = list()
    report = set(report)
    
    for id in id_list:
        users.append(User(id=id))
    
    for re in report:
        splited_report = re.split(' ')
        user = get_user_by_id(users, splited_report[0])
        target = get_user_by_id(users, splited_report[1])
        target.report_count_increment()
        user.append_target(target)
    
    for user in users:
        cnt = 0
        for target in user.targets:
            if target.is_out(k):
                cnt += 1
        answer.append(cnt)

    return answer

def get_user_by_id(users: List[User], id: str):
    for user in users:
        if user.id == id:
            return user

 

 

느낀 점

더보기

find처럼 특정 키워드를 가지고 인덱스를 가져오는 list.index() 메소드에 대해서 새롭게 배웠다.

반응형
반응형

 

 

 

안녕하세요

Henry's Algorithm의 Henry입니다.

 

오늘은 제가 프로그래머스 

Level 2의 프린터 문제를 풀어보았습니다.

 

첫 시도는 잘 안풀렸는데,

다음날 다시 풀어보니까, 생각이 잘 정리되서 잘 풀렸네요!ㅎㅎ

 

 

문제는 푸는 요령:

저는 Queue 자료구조를 사용해서 풀었습니다.

priorities와 index 정보를 가지고 있는 배열 각각 1개씩 만들고,

while 문을 통해 priorities가 모두 pop 되기 전까지 우선순위를 비교하는 과정을 반복했습니다.

 

- java.util.Collections을 import해서 List의 최대, 최소를 구할 수 있어, 해당 라이브러리를 사용했습니다.

 

아래는 제가 푼 코드입니다.

import java.util.Queue;
import java.util.LinkedList;
import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        Queue<Integer> indexs = new LinkedList<>();
        Queue<Integer> priors = new LinkedList<>();
        
        for(int i = 0; i< priorities.length; i++){
            priors.add(priorities[i]);
            indexs.add(i);
        }
        
        while(!priors.isEmpty()){
            int front = priors.poll();
            int frontIdx = indexs.poll();
            
            int max = priors.isEmpty() ? -1 : Collections.max(priors);
            
            if(max == -1){
                return answer + 1;
            }
            
            if(front >= max){
                answer += 1;
                if(frontIdx == location){
                    return answer;
                }
                continue;
            }
            
            priors.add(front);
            indexs.add(frontIdx);
        }
        
        return answer;
    }
}

 

 

오늘도 즐거운 코딩되세요~!ㅎㅎ

반응형

+ Recent posts