본문 바로가기

Tech

(583)
[이코테] 다이나믹프로그래밍 - 개미 전사 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 개미 전사는 부족한 식량을 충당하고자 메뚜기 마을의 식량창고를 몰래 공격하려 한다. 메뚜기 마을엔 여러 개의 식량창고가 있는데 식량창고는 일직선으로 이어져 있다. 각 식량창고에는 정해진 수의 식량을 저장하고 있으며 개미 전사는 식량창고를 선택적으로 약탈하여 식량을 빼앗을 예정이다. 이 때 메뚜기 정찰병들은 일직선상에 존재하는 식량창고 중에서 서로 인접한 식랴창고가 공격받으면 바로 알아챌 수 있다. 따라서 개미 전사가 정찰병에게 들키지 않고 식량창고를 약탈하기 위해서는 최소한 한 칸 이상 떨어진 식량창고를 약탈해야 한다. 개미 전사를 위해..
[이코테] 다이나믹프로그래밍 - 1로 만들기 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 정수 X가 주어질 때 정수 X에 사용할 수 있는 연산은 다음과 같이 4가지 이다. X가 5로 나누어 떨어지면 5로 나눈다. X가 3으로 나누어 떨어지면 3으로 나눈다. X가 2로 나누어 떨어지면 2로 나눈다. X에서 1을 뺀다. 정수가 주어졌을 때, 연산 4개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오 입력조건 첫째 줄에 정수 X가 주어진다.(1
[이코테] 이진탐색 - 떡볶이 떡 만들기 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 동빈이네 떡볶이 떡은 길이가 일정하지 않다. 대신에 한 봉지 안에 들어가는 떡의 총 길이는 절단기로 잘라서 맞춰준다. 절단기에 높이(H)를 지정하면 줄지어진 떡을 한 번에 절단한다. 높이가 H보다 긴 떡은 H위의 부분이 잘릴 것이고, 낮은 떡은 잘리지 않는다. 예를 들어, 높이가 19, 14, 10, 17 cm인 떡이 있고 절단기 높이를 15cm로 지정하면 자른 뒤 떡의 높이는 15, 14, 10, 15cm가 될 것이다. 그리고 잘린 떡의 길이는 차례대로 4, 0, 0, 2cm가 된다. 이 때 손님은 잘린 떡의 길이의 총 합인 6cm의 ..
[이코테] 이진탐색 - 부품 찾기 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 동빈이네 전자매장에는 부품이 N개 있다. 각 부품은 정수 형태의 고유한 번호가 있다. 어느 날 손님이 M개 종류의 부품을 대량으로 구매하겠다며 당일 날 견적서를 요청했다. 동빈이는 때를 놓치지 않고 손님이 문의한 부품 M개 종류를 모두 확인해서 견적서를 작성해야 한다. 이 때 가게 안에 부품이 모두 있는지 확인하는 프로그램을 작성해보자. 입력조건 첫째 줄에 정수 N이 주어진다(1
[이코테] BFS - 미로 탈출 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 N by M 크기의 직사각형 형태의 미로에 갇혀있다. 미로에는 괴물이 있어 이를 피해서 탈출해야 한다. 유저의 초기 위치는 (1, 1)이고 미로의 출구는 (N, M) 위치에 존재하며 한 번에 한 칸 씩 이동이 가능하다. 이 때 괴물이 있는 부분은 0, 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이 때 유저가 미로를 탈출하기 위해 움직여야 할 최소 칸의 개수를 구해라. 단, 칸을 셀 때 시작, 마지막 칸도 포함시켜야 한다. 입력조건 첫째 줄에 두 정수 N, M(4
[이코테] DFS - 음료수 얼려 먹기 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 N by M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분까지 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때, 생성되는 총 아이스크림의 개수를 구하라. 입력조건 첫 번째 줄에 얼음 틀의 세로길이 N과 가로길이 M이 주어진다.(1
[이코테] 구현 - 게임 개발 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 게임 캐릭터가 맴 안에서 움직이는 시스템을 개발하고 있다. 캐릭터가 있는 장소는 1 by 1 크기의 정사각형으로 이뤄진 N by M 크기의 직사각형으로 각각의 칸은 육지 또는 바다이다. 캐릭터는 동서남북 중 한 곳을 바라본다. 맵의 각 칸은 (A, B)로 나타낼 수 있고, A는 북쪽으로부터 떨어진 칸의 개수(즉, 행을 의미), B는 서쪽으로부터 떨어진 칸의 개수(즉, 열을 의미)이다. 캐릭터는 상하좌우로 움직일 수 있고, 바다로 되어 있는 공간에는 갈 수 없다. 캐릭터 움직임의 매뉴얼은 다음과 같다. 현재 위치에서 현재 방향을 기준으로 ..
[이코테] 구현 - 왕실의 나이트 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 왕실 정원은 8 by 8 좌표 평면이다. 왕실의 나이트는 다음과 같이 L자 형태로 움직일 수 있다. 수평으로 두 칸 이동한 뒤에 수직으로 한 칸 이동하기 수직으로 두 칸 이동한 뒤에 수평으로 한 칸 이동하기 좌표평면의 가로, 세로는 다음과 같으며 나이트의 초기 위치가 가로, 세로 문자열을 합쳐서 주어진다. 예를 들어, a1로 주어진다면 가장 왼쪽의 위 좌표를 의미한다. 입력조건 첫째 줄에 8 by 8 좌표 평면상에서 현재 나이트가 위치한 곳의 좌표를 나타내는 두 문자로 구성된 문자열이 입력된다. 입력 문자는 a1처럼 열과 행으로 이뤄진다..
[이코테] 구현 - 시각 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 정수 N이 입력되면 00시 00분 00초부터 N시 59분 59초까지의 모든 시각 중에서 3이 하나라도 포함되는 모든 경우의 수를 구하는 프로그램을 작성해라. 입력조건 첫째 줄에 정수 N이 입력된다.(0
[이코테] 구현 - 상하좌우 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 N by N 크기의 정사각형 공간 위에서 가장 왼쪽 위 좌표는 (1, 1)이고 가장 오른쪽 아래 좌표는 (N, N)이다. 상, 하, 좌, 우로만 이동할 수 있으며 시작 좌표는 항상 (1, 1)이다. 이동 계획이 문자열로 주어질 때 최종 위치는 어디인지 출력하라. L : 왼쪽으로 한 칸 이동 -> 열 방향으로 -1 R : 오른쪽으로 한 칸 이동 -> 열 방향으로 +1 U : 위로 한 칸 이동 -> 행 방향으로 -1 D : 아래로 한 칸 이동 -> 행 방향으로 +1 입력조건 첫째 줄에 공간의 크기를 나타내는 N이 주어진다(1 N: conti..
[이코테] 그리디 - 1이 될 때까지 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제설명 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택해 수행하려고 한다. 단, 두 번째 연산은 N이 K로 나누어 떨어지는 즉, N % K == 0 일 때만 선택할 수 있음 N에서 1을 뺀다. N을 K로 나눈다. 입력조건 첫째 줄에 N(2
[이코테] 그리디 - 숫자 카드 게임 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제 설명 숫자 카드 게임은 여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. 단, 게임의 룰을 지키며 카드를 뽑아야 하고 룰은 다음과 같다. 먼저 뽑고자 하는 카드가 포함되어 있는 행을 선택한다. 그리고 행에 포함된 카드 중에서 가장 숫자가 낮은 카드를 뽑아야 한다. 이 때 가장 큰 숫자가 뽑히도록 프로그램을 작성하라. 입력조건 첫째 줄에 숫자 카드들이 놓인 행의 개수 N과 열의 개수 M이 공백을 기준으로 하여 각각 자연수로 주어진다(1
[이코테] 그리디 - 큰 수의 법칙 해당 포스팅의 문제의 출처는 나동빈님의 이것이 취업을 위한 코딩 테스트 교재를 공부하면서 풀이할 때 본인의 사고 과정 흐름과 문제 풀이를 기록하기 위함 입니다. 문제 설명 동빈이의 큰 수의 법칙은 다양한 수로 이루어진 배열이 있을 때, 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙이다. 단, 배열의 특정한 인덱스(번호)에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없는 것이 이 법칙의 특징이다. 예를 들어, 순서대로 2, 4, 5, 4, 6 으로 된 배열이 있을 때, M이 8이고, K가 3이라고 가정했을 때, 큰 수의 법칙으로 6+6+6+5+6+6+6+5인 46이 되게 된다. 단, 서로 다른 인덱스에 해당하는 수가 동일한 수라도 서로 다른 것으로 간주한다. 예를 들어, 3, 4, 3, 4,..
[Git] git의 stash 기능 알아보기 이번 포스팅에서는 git의 stash 기능에 대해 알아보려 한다. stash의 사전적 정의는 '몰래 숨겨두다' 라는 의미이다. 그러면 git에서 stash는 대체 무엇을 숨겨둔다는 것일까? 결론부터 말하면 stash 기능은 git add 로 특정 파일을 수정해서 staging area에 올려놓은 버전을 큐 와 비슷한 방식으로 돌아가는 자료구조에 백업해놓는다. 보다 자세한 기능을 알기 위해 다음 예시 화면을 천천히 따라가보자. 우선, 아래와 같이 master 브랜치와 dev1 브랜치에 work1.txt 라는 동일한 파일이 존재하는 상태이다. 자, dev1 브랜치에서 work2.txt 라는 파일을 만들어 git add 하여 staging area에 올려놓아보자. 그런데 dev1 브랜치에서 커밋을 하기 전에 ..
[Git] 무시무시한 conflict를 해결해보자 이번 포스팅에서는 git 사용자라면 누구나 한 번 보고 두려워(?)했을 conflict 이슈를 해결하는 방법에 대해 알아보고자 한다. conflict 는 주로 서로 다른 branch에서 동일한 파일의 동일한 부분을 수정했을 때 발생하는 문제이다. 다음과 같이 2개의 branch인 master 과 dev 브랜치에 동일한 파일 work1.py가 있다고 가정해보자. 이제 master 브랜치에서 work1.py 파일을 다음과 같이 수정하고 add, commit 시키자. 그리고 dev1 브랜치로 이동 후에 work1.py 파일을 수정하되 master 브랜치에서 수정한 부분과는 다른 부분을 수정해보자. 이제 master 브랜치에서 dev1 브랜치를 merge 시켜보고, dev1 브랜치에서도 master 브랜치를 m..
[Python] staticmethod 와 classmethod 쓰임의 차이 이번 포스팅에서는 파이썬 클래스 문법에서 자주 마주칠 수 있는 staticmethod(정적 메소드)와 classmethod(클래스 메소드)의 차이점에 대해 예시 코드로 알아보려고 한다. 1. staticmethod 우선 staticmethod는 다음과 같은 특징을 지닌다. 부모 클래스에서 정의된 staticmethod는 자식 클래스에서 call 할 수 있음 클래스 변수에는 접근 가능 생성자 포함 인스턴스 메소드 변수에는 접근 불가능 먼저 부모 클래스에서 정의된 staticmethod는 자식 클래스에서 call 할 수 있는 경우이다. 하단의 코드를 살펴보자. class Parent: class_val = 'class variable' def __init__(self): self.name = 'younghu..
[Git] Merge 할 때, Fast-forward 방식은 무엇인가? 이번 포스팅에서는 git 에서 하나의 브랜치에서 다른 브랜치의 파일을 Merge 하거나 또는 원격 저장소에서 Pull을 하거나 할 때 메세지로 Fast-forward 방식이라는 메세지가 등장한다. 이에 대해서 잘 설명해주시는 이고잉님의 강의도 있고 git 공식 문서에도 친절하게 소개되어 있다. 강의를 바탕으로 배운 내용을 기록해보려 한다. 우선, 아래와 같이 현재 master 브랜치에서 3개의 커밋 C0, C1, C2가 완료된 상태라고 가정해보자. 아래의 그림을 보면 화살표는 과거를 가리키는데, 이는 '부모' 커밋을 의미한다. 어쨌거나 시간 순서대로 하면 C0이 가장 오래 전에 한 커밋, C2가 가장 최근에 한 커밋이다. 이제 여기서 우리는 하나의 기능을 추가하기 위해서 master 브랜치와 버전이 동일..
[Git] branch 관련 명령어 해당 포스팅에서는 git 명령어 중 branch와 관련된 명령어에 대해 기록하려고 한다. 1. 브랜치 목록을 볼 때 git branch 2. 브랜치 생성할 때 git branch [branch_name] 3. 브랜치를 삭제할 때 git branch -d [branch_name] 4. 병합하지 않은 브랜치를 강제로 삭제할 때 git branch -D [branch_name] 5. 현재 브랜치에서 다른 브랜치로 전환할 때 git checkout [branch_name] 6. 새로운 브랜치를 생성하고 그 브랜치로 전환하는 것을 동시에 할 때 git checkout -b [branch_name] 7. 브랜치 간의 커밋 차이를 비교할 때 git log [branch 1]..[branch 2] 위와 같은 명령어를 ..
[Git] Gistory를 통해 git commit의 원리를 이해해보자 저번 포스팅 git add 원리에 이어서 git commit 의 원리를 Gistory를 통해 이해해보자. 원본 강의는 여기를 참고하자. 저번 시간의 마지막 화면은 이렇다. 현재 work1 이라는 동일한 내용을 가지고 있는 work1.txt, work2.txt 를 add 해서 staged 상태로 올린 단계이고 이제 work1.txt, work2.txt를 커밋해보자. 커밋을 하니 몇 가지 새로운 파일들이 추가가 되었다. 그 중에서 커밋으로 새롭게 생긴 objects 들 중 맨 위에 있는 , cb~로 시작되는 해쉬값이 있는 경로를 클릭해보자. 자세히 보면 커밋할 때 작성한 커밋 메세지 work1,2 commit 이 존재하고 누가 커밋했는지 author, committer 에 대한 정보도 존재한다. 근데 눈에 ..
[Git] Gistory를 통해 git add 의 원리를 이해해보자 Git을 사용하면서도 Git의 원리에 대해서는 생각해보지 못했었다. git add, git commit 등등.. 명령어만 날릴 줄 알았지 명령어를 날리는 순간 내부적으로 어떤 일이 발생하는지 생각도 짐작도 하지 못했다. 그런데 몇 년 전에, 이고잉님이 이와 관련된 주제로 강의를 올리셨었다. 그래서 해당 강의를 듣고 내가 생각조차 못했던 git의 원리를 이해한 내용을 기록해보고자 한다. 우선 git의 동작원리를 분석하기 위해서는 이고잉님께서 직접 만드신 GUI 웹 브라우저 툴인 Gistory를 다운로드 받아야 하는데, 이에 대해서는 여기를 참고하자. 이번 포스팅에서는 git add 명령어를 날리는 순간 대체 무슨일이 일어나는지에 대해 살펴보자. 우선 로컬에 빈 디렉토리를 만들고 git init 명령어로 g..