https://programmers.co.kr/learn/courses/30/lessons/12900 코딩테스트 연습 - 2 x n 타일링 가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 programmers.co.kr 문제 접근법 2xn의 직사각형이 있을 때 마지막에 1x2 타일이 없다고 가정하면 그 직사각형은 가로길이 n-1까지의 경우의 수 라고 볼 수 있다. 같은 경우로 2x1 짜리 타일이 없으면 가로길이 n-2까지의 경우의 수 라고 볼 수 있다. DP[N](2xn 까지의 경우의 수) = DP[N-1] + DP[N-2]가 성립한다. 아래는 코드입니다. 1 2 ..
https://programmers.co.kr/learn/courses/30/lessons/42862 코딩테스트 연습 - 체육복 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번 programmers.co.kr 문제 접근법 전체 인원이 체육복을 가지고 있다고 가정한다. reserve에 해당하는 인원들에게는 체육복을 하나씩 더 추가한다. lost에 해당하는 인원들에게는 체육복을 하나씩 제거한다. 자기의 체육복이 2개 일 때 체육복을 분배한다. 아래는 해당 코드입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23..
programmers.co.kr/learn/courses/30/lessons/49993 코딩테스트 연습 - 스킬트리 programmers.co.kr 문제 접근법 skill 문자열에 있는 문자를 skill_trees에 있는 문자열에 있는 문자와 하나씩 비교한다. 해당하는 단어가 있을경우 skill의 몇번째 위치의 문자인지와 skill_trees의 원소의 몇번째 자리인지를 체크하여 pair로 vector에 넣어준다. 만약 다음 문자가 이전 문자의 위치보다 앞에 있다면 틀린 스킬 트리이므로 다음 스킬 트리를 검사한다. vector의 사이즈가 1보다 크고 skill_trees의 원소를 모두 체크한 경우 vector의 맨 앞값의 first가 0이 아니라면, 스킬 트리의 순서가 틀린것이므로, 다음 스킬트리를 검사한..
programmers.co.kr/learn/courses/30/lessons/60057 코딩테스트 연습 - 문자열 압축 데이터 처리 전문가가 되고 싶은 어피치는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자 programmers.co.kr 문제 접근법 1자리 부터 시작하여 문자열 길이의 절반까지의 길이 만큼의 문자의 중복을 체크한다. 문자열 길이 절반을 초과하면 중복이 나오지 않기 때문이다. 중복되는 문자의 갯수를 체크 후 중복 되지않는 문자를 만나면 중복되는 문자의 갯수와 해당 문자를 더한 문자열을 만든다. 중복 되지 않았던 문자를 기준으로 다시 중복을 체크한다. 만약 문자열의 길이 % 중복체크용 문자 ..
programmers.co.kr/learn/courses/30/lessons/42587 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린�� programmers.co.kr 문제 접근법 순서와 우선순위를 저장할 queue와 우선순위 순서대로 정렬할 때 사용할 priority_queue를 준비한다. for문을 priorities의 길이만큼 사용하여 queue에 순서와 우선순위를 push하고 priority_queue에 priorites의 값들을 넣어준다. queue의 맨 앞값의 second 값이 priority_queue의 최상단 값과 같지않다면 ..
programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 �� programmers.co.kr 문제 접근법 progresses에 speeds의 값을 더해 100이 되는 날짜를 구한다. 이 날짜를 deque에 넣는다. 맨 처음 들어온 날짜 값을 기준으로 뒤에 들어온 날짜 값들이 큰지 작은지 비교한다. 작거나 같을 경우 앞에 기능이 끝날 때 같이 나가게 되므로 배포되는 값에 +1을 한다. 클 경우 deque에서 pop_front()를 진행 후 deque 내부가..
programmers.co.kr/learn/courses/30/lessons/42578 코딩테스트 연습 - 위장 programmers.co.kr 문제 접근법 map을 이용해서 카테고리의 갯수를 파악합니다. 전체의 조합의 갯수를 구하는 방법은 각 카테고리의 갯수 + 입지 않는 경우의 수를 더해서 모두 곱해주면 됩니다. 단, 옷을 하나도 안 입는 경우가 없으므로 -1을 해주어야 합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include #include #include using namespace std; int solution(vector clothes) { int answer = 1; int len = clothes...
programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조�� programmers.co.kr 문제 접근법 가장 작은 값을 앞으로 두기 위해 sort를 합니다. 맨 앞에 값을 가지고 다른 값의 접두어가 되는지를 체크하면 됩니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include #include #include using namespace std; bool solution(vector phone_book) ..
https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일 차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 트럭은 1초에 1만큼 움직이며, 다리 길이�� programmers.co.kr 문제 접근법 먼저 진입한 트럭이 먼저 나가므로 queue를 사용합니다. vector에 접근하기 위한 index 및 다리 위에 올라간 트럭들의 무게를 합, 출력할 정답을 나타낼 변수를 선언합니다. 다리 위 트럭들의 무게와 다음 트럭의 무게의 합을 다리가 견딜수 있는 무게인지 비교합니다. 가능 할 경우 vector 인덱스 값이 truck_weig..