no image
[Python] 프로그래머스 택배상자 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 기존 컨베이어 벨트와 보조 컨베이어 벨트를 각각 Queue와 Stack으로 만든 뒤, 주어진 조건에 만족하도록 구현했다. # 1 ~ n 까지의 택배를 재 배열 # 기존 컨베이어 : queue -> 작은 수부터 빼낼 수 있음 # 보조 컨베이어 : Stack -> 큰 수부터 빼낼 수 있음 # 몇 개의 상자를 실을 수 있는지 # order의 상자가 나올 때 까지 pop from collections import deque def solution(order): order = deque(order..
2023.04.05
no image
[Python] 프로그래머스 메뉴 리뉴얼 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 Orders 배열의 원소 크기가 작고, 조합을 확인해야 하는 Course의 크기 또한 크지 않다. 따라서 모든 세트 조합을 구하더라도 시간 초과가 발생하진 않는다. 세트 조합을 구하는 과정에서 주의할 점은 알파벳 순서가 다르더라도 동일한 세트로 처리해야 한다는 점이다. 이후엔 문제에서 주어진 조건에 맞게 필터링하면 된다. # 각 손님들이 주문할 때, 가장 많이 함께 주문한 단품 메뉴를 코스 요리 메뉴로 구성 # 코스 요리 : 최소 2 가지 단품 + 최소 2 명의 손님이 주문했던 제품 만 ..
2023.03.31
no image
[Python] 프로그래머스 롤케이크 자르기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 가짓수를 동일하게 케이크를 분리해야 한다. 앞 케이크 분리 시, 뒷 케이크의 일부 성분이 없어져 가짓수가 바뀔 수 있다는 것을 주의해야 한다. 이 생각을 안하고 이분 탐색으로 접근해서 풀었고, 결국 스스로 푸는데는 실패했다. 아래는 다른 사람의 코드를 보고 이해한 내용이다. 각 케이크 가짓수를 따로 저장해서 관리 우선 각 케이크의 idx 별 가짓수를 pt1_cnt, pt2_cnt에 저장한다. 모두 저장이 끝나면 pt1_cnt[i]와 pt2_cnt[i + 1] 이 동일한 지 확인하고, 그 ..
2023.03.30
no image
[Python] 프로그래머스 숫자 변환하기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 x에서 y 까지의 최소 이동 횟수를 구하기 위해서 BFS를 활용했다. 이때 x와 y가 같은 경우엔, 이동 횟수가 0으로도 도달 가능하기에 미리 예외 처리를 해줬다. # 최소 연산 횟수? # y 까지의 위치를 저장하는 배열 생성 후 BFS from collections import deque def bfs(map_info: list, start: int, end: int, n: int) -> int: queue = deque() queue.append(start) # BFS 시작 while..
2023.03.24
no image
[Python] 프로그래머스 삼각 달팽이 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 재귀를 활용한 풀이 : 코드 작성 실패 n 이 3 보다 클 경우, 전체 삼각형은 외부 삼각형, 내부 삼각형으로 분리할 수 있다는 점을 주목해 풀이를 시도했다. 코드 작성엔 실패했고, 다른 사람이 작성한 아래 코드를 보고 이해한 뒤 주석을 작성했다. arr = [] def draw(x, y, cnt, num): if cnt < 1: return number = num # 삼각형의 좌측 대각선 for i in range(cnt): arr[x + i][y] = number number += 1..
2023.03.23
no image
[Python] 프로그래머스 뒤에 있는 큰 수 찾기 풀이
문제 확인 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 완전 탐색으로 접근할 경우 $O(N^2)$ 이고, numbers의 길이는 최대 100만이기 때문에 시간 초과가 발생한다. 뒷 큰수는 앞에서 부터 값을 보관해 뒀다가, 더 큰 값이 나오면 제거하고, answer 정보를 업데이트하는 방식으로도 얻을 수 있다. 이 경우 스택에 값 numbers의 idx를 저장해두고, numbers의 숫자가 가장 최근에 입력된 값과 유사한 지 비교하면 된다. # 자신보다 뒤 + 크면서 가장 가까이 있는 수 : 뒷 큰수 # 뒷 큰수가 없으면 -1 # 완전 탐색 불..
2023.03.22
no image
[OOP] Class와 Instance(Object) 알아보기 Feat. self, cls
Class 데이터로 어떤 문제를 해결하기 위해서, OOP 원칙에 따라 코드로 구현한 것이다. 다시 말하면 어떤 집단에 속하는 Attributes(속성)과 Methods(행위)를 코드로 구현해, 변수와 메소드로 정의한 것이다. 이러한 Class는 Object(객체)의 설계도 역할을 하기 때문에, 실제 메모리 상에 올라가진 않는다. 실제 메모리에 할당되는 것은 Class가 아닌 객체이고, 객체 각각은 instance라고 부른다. Object(Instance) Class에서 정의한 것(설계도)를 토대로 실제 메모리 상에 할당된 것(실제 사물)이다. 프로그램에서의 데이터와 행위를 묶어 만들어진, 실체이다. Class로 만들어진 여러 instance는 각각 독립적이다. Python의 self 과 cls ? sel..
2023.03.21
no image
[OOP] OOP(객체 지향 프로그래밍)의 개념과 특징 알아보기
OOP란? 필요한 데이터를 추상화하여 속성(Attributes)와 행위(methods)를 가진 객체를 만들고, 그 객체들 간의 유기적인 상호 작용을 통해 로직을 구성하는 프로그래밍 방법이다. 데이터를 중심으로 필요한 기능을 함수로 구현하는 방식의 절차 지향 프로그래밍과 달리, OOP에선 데이터와 함수들을 묶고 이를 객체로 관리한다. 객체라고 하면 뭔가 말이 어렵고 한데, 그냥 우리가 일반적으로 사용하는 언어 구조와 비슷하다고 생각하면 이해하기 쉽다. 위 그림을 예시로 들면 우선 데이터는 '돈', '잔돈', '제품'이다. 앞서 절차 지향에선 데이터(돈, 잔돈, 제품)를 행위와 별도로 생각한다고 했다. 그래서 절차 지향에선 데이터에 대한 모든 행위를 '~돈을 ~', '~잔돈을~', '~제품을~'의 식으로 표..
2023.03.16
no image
[Git] Configuration의 Scope 확인하기
Local git config --local로 접근 가능 해당 레포에만 적용 됨 설정 파일의 경로: 레포/.git/config Global git config --global로 접근 가능 현재 사용자에만 적용 됨 설정 파일의 경로: 유저/.git/config System git config --system으로 접근 가능 현재 PC의 모든 사용자와, 레포에 적용 됨 설정 파일의 경로 : 프로그램/git/config 주의! 모든 것은 현재 사용 중인 로컬 PC의 기준이고, Github 서버에 업로드 된 원격 저장소 origin과는 무관함 참고 Configure git for Azure and GitHUB and BitBucket on one system i am working on multiple proje..
2023.03.16
no image
Github Actions에서 git diff로 이전 Commit 확인하기
문제 상황Github Actions에서 git diff 명령어를 통해, 이전 Commit 정보 참고를 시도할 경우 다음과 같은 오류가 발생한다. 이때 입력한 branch 등의 이름이 잘못 되지 않아도, 동일한 메시지가 반복된다.git diff origin/main..origin/main^ 해결하기해당 오류는 checkout 액션이 가장 최근에 발생한 1개의 커밋 히스토리만 받아오기 때문에 발생하는 문제다. Github Actions이 실행되는 서버 입장에선, 히스토리 정보가 없는데 이전 커밋을 참고하라고 하니 당연히 오류가 발생할 수 밖에 없다. 이를 해결하기 위해선, checkout 액션이 이전 커밋 정보까지 받아올 수 있도록 fetch-depth 정보를 수정해줘야 한다. 앞서 1개의 커밋만 받아온다고..
2023.03.13
no image
[Github Actions] 기본 구성 요소 파악하기
Workflows 하나 이상의 Job과 그 내부 Step에 있는 기능들을 자동화하여 관리 가능 Workflows를 실행 시키는 트리거는 Event 라고 부름 Event로는 push, pull request, fork 등 Github 내 다양한 동작들이 지정될 수 있음 .github/workflows에 저장돼 있는 yaml 파일이 바로 Workflows를 정의하는 파일임 name: Update README # workflows의 이름 on: # Event 발생 시 실행 정보 push: branches: [ "main" ] pull_request: branches: [ "main" ] Jobs Workflows에서 독립적으로 수행할 작업들을 Job이라고 부름 각 Job은 각각 다른 서버에서 독립적으로 실행되..
2023.03.12
no image
[Git] 한글 깨짐 해결하기
문제 상황 깃 작업 중에서 diff나 status로 로그를 찍어볼 때, 한글이 깨져서 나오는 경우가 있다. git diff --name-only auto-readme..origin/auto-readme
2023.03.09