[프로그래머스]level.2 - 점프와 순간 이동(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/12980 문제 설명 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 줄이기 위해 점프로 이동하는 것은 최소로 하려고 합..
[프로그래머스]level.2 - 과제 진행하기(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/176962# 문제 설명 과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다. 과제는 시작하기로 한 시각이 되면 시작합니다. 새로운 과제를 시작할 시각이 되었을 때, 기존에 진행 중이던 과제가 있다면 진행 중이던 과제를 멈추고 새로운 과제를 시작합니다. 진행중이던 과제를 끝냈을 때, 잠시 멈춘 과제가 있다면, 멈춰둔 과제를 이어서 진행합니다. 만약, 과제를 끝낸 시각에 새로 시작해야 되는 과제와 잠시 멈춰둔 과제가 모두 있다면, 새로 시작해야 하는 과제부터 진행합니다. 멈춰둔 과제가 여러 개일 경우, 가장 최근에 멈춘 과제부터 시작합니다. 과제 계획을 담은 이차원 문자열 배열 pla..
[프로그래머스]level.2 - 예상 대진표(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/12985# 문제 설명 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종..
[프로그래머스]level.2 - 광물 캐기(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/172927 문제 설명 마인은 곡괭이로 광산에서 광석을 캐려고 합니다. 마인은 다이아몬드 곡괭이, 철 곡괭이, 돌 곡괭이를 각각 0개에서 5개까지 가지고 있으며, 곡괭이로 광물을 캘 때는 피로도가 소모됩니다. 각 곡괭이로 광물을 캘 때의 피로도는 아래 표와 같습니다. 예를 들어, 철 곡괭이는 다이아몬드를 캘 때 피로도 5가 소모되며, 철과 돌을 캘때는 피로도가 1씩 소모됩니다. 각 곡괭이는 종류에 상관없이 광물 5개를 캔 후에는 더 이상 사용할 수 없습니다. 마인은 다음과 같은 규칙을 지키면서 최소한의 피로도로 광물을 캐려고 합니다. 사용할 수 있는 곡괭이중 아무거나 하나를 선택해 광물을 캡니다. 한 ..
[프로그래머스]level.2 - 행렬의 곱셈(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/12949 내 코드 행렬 연산을 구현하면 된다. 행렬 연산 방법을 코드로 옮기는 게 조금 머리 아팠다. #include #include using namespace std; vector solution(vector arr1, vector arr2) { vector answer(arr1.size(), vector(arr2[0].size(), 0)); for(int m = 0; m < answer.size(); ++m) for(int n = 0; n < answer[0].size(); ++n) for(int i = 0; i < arr1[0].size(); ++i) answer[m][n] += arr1[m]..
[프로그래머스]level.3 - 멀리 뛰기(C++)
·
🖥️ Study Note/Coding Test
https://school.programmers.co.kr/learn/courses/30/lessons/12914 문제 설명 효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는 (1칸, 1칸, 1칸, 1칸) (1칸, 2칸, 1칸) (1칸, 1칸, 2칸) (2칸, 1칸, 1칸) (2칸, 2칸) 의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다. 제한 사항 n은 1 이상, 2000 이하인 정수입..
[프로그래머스]level.3 - 자물쇠와 열쇠(C++)
·
🖥️ Study Note/Coding Test
문제 https://school.programmers.co.kr/learn/courses/30/lessons/60059#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명 고고학자인 튜브는 고대 유적지에서 보물과 유적이 가득할 것으로 추정되는 비밀의 문을 발견하였습니다. 그런데 문을 열려고 살펴보니 특이한 형태의 자물쇠로 잠겨 있었고 문 앞에는 특이한 형태의 열쇠와 함께 자물쇠를 푸는 방법에 대해 다음과 같이 설명해 주는 종이가 발견되었습니다. 잠겨있는 자물쇠는 격자 한 칸의 크기가 1 x 1인 N x N 크기의 정사각 격자 형태이고 특이한 ..
[프로그래머스]level.1 - 하샤드 수(C++)
·
🖥️ Study Note/Coding Test
문제 https://school.programmers.co.kr/learn/courses/30/lessons/12947 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 내 풀이 #include #include using namespace std; bool solution(int x) { bool answer = false; int total = 0; int tmp = x; while(tmp > 0) { total += (tmp % 10); tmp /= 10; } if(x % total == 0) answer = true; return answer; }
프로토타입(ProtoType) 패턴
·
🖥️ Study Note/Design Patteren
{ 프로토타입이란? } 프로토타입 패턴이란 GoF의 생성 패턴 중 하나로, 원본 객체(프로토타입)를 복제하여 객체를 생성하는 패턴이다. { 게임 개발에서 프로토타입 활용하기 : 몬스터 대량 스폰하기 } 위 게임을 보면 수많은 몬스터들이 대량 생성되어 있다. 이런 몬스터 생성 코드를 어떻게 하면 간단하게 작성할 수 있을까? 몬스터 스포너에 프로토타입으로 사용할 몬스터 객체를 등록해두고 복제(Clone)하여 게임 월드 상에 배치 시키면 끝이다. 프로토타입 패턴은 원본 객체를 복사할 때 프로토타입의 클래스 뿐만 아니라 상태도 같이 복제한다. 이 말은 몇 개의 속성을 변경하는 것만으로도 하나의 프로토타입에서 다양한 종류의 객체를 생성할 수 있다는 것이다. 예를 들어 애니메이션 정보만 바꿔 다른 외형을 가진 몬스..
[프로그래머스]level.2 - 택배 상자(C++)
·
🖥️ Study Note/Coding Test
문제 https://school.programmers.co.kr/learn/courses/30/lessons/131704 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 첫번째 풀이 첫번째는 그리디로 풀었는데 vector.erase()를 반복문으로 사용해야 해서 시간 초과가 났다. list를 사용하여 erase 시간 복잡도를 줄인다고 해도, list는 index를 이용한 랜덤 액세스가 불가능하기 때문에 코드가 복잡해지고 원하는 인덱스에 접근하기까지 시간이 오래걸린다. 게다가 생각하기도 힘든 풀이이다. 틀린 풀이이기 때문에 간단하게만 설명하면, 현재 박스가 ..