본문 바로가기

알고리즘/프로그래머스

[Lv2] 행렬 테두리 회전하기(python) 1. 문제 https://programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr 2. 접근 방법 - 파이썬으로 푸는 방법이 생각이 안나서 다른 풀이를 보고 참고했음.... 얼른 파이썬 익숙해지자 흑흑 - 난 전체 배열을 복사하려 했는데, 한 개의 값만 저장해놓고 값을 뒤에서( 현재 값 기준 반시계 방향의 값)을 땡겨서 가져온 후 맨 마지막에 저장했던 값을 넣는 방식으로 푸는 방식도 있었다. 다음부턴 다른 풀이 참.. 더보기
[Lv2]소수찾기(C++) 1. 문제 programmers.co.kr/learn/courses/30/lessons/42839?language=cpp 코딩테스트 연습 - 소수 찾기 한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다. 각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 programmers.co.kr 2. 접근 방법 1) numbers의 각 자리 숫자를 char 단위로 입력 받음 => vector v; 2) 만들 수 있는 숫자의 길이는 최소 한 자리수부터 최대 v.size()자리 수 이므로, 각 자리수 만큼 순열을 구함 (ex. 1개 순열, 2개 순열 ,.... v.size() 개 순열 을 구함) 3) 각 순열에 의해 만들어.. 더보기
[Lv2]가장 큰 수(C++) 1. 문제 programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 �� programmers.co.kr 2. 접근 방법 1) 처음에 "한자리수 끼리 비교하는 법 ", "두 자리 수끼리 비교하는 법".. 등 자리수 별로 조건을 달리해야 하나 고민이 있었다. 그런데 많은 자리수를 일일히 다 비교하는 게 말이 안된다고 생각했고, 다른 방법으로 접근했다. 2) string으로 표현하라는 게 힌트라고 생각했.. 더보기
[Lv1] K번째 수(C++) 1. 문제 programmers.co.kr/learn/courses/30/lessons/42748 코딩테스트 연습 - K번째수 [1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3] programmers.co.kr 2. 접근 방법 1) array에 있는 값들을 -> 자른 후 -> 정렬하여 -> K번째 수를 구하여 answer에 넣는 단순 구현 문제 => command[i]에 주어진 세 값(i,j,k)를 사용하여 array[i]~array[j]까지 범위만 복사하여 -> 정렬 후 -> K-1번째 값을 구함 2) 해당 문제는 assign함수를 알면 쉽게 풀 수 있었음 3. 실수했던 부분 & 처음 알았던 부분 * assign함수 1) v.assign.. 더보기
[Lv2]구명보트(C++) 1. 문제 programmers.co.kr/learn/courses/30/lessons/42885 코딩테스트 연습 - 구명보트 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5 programmers.co.kr 2. 접근 방법 1) "한 보트엔 최대 2명만 들어갈 수 있다." 라는 점에서 greedy 접근 방식을 생각했다. ( 만약 한 보트에 최대 인원이 정의되어있지 않았다면 DP로 풀어야 했는데, 최대 2명이므로 가장 무거운 사람 + 가장 가벼운 사람을 한쌍으로 묶으면 된다. ) 2) 사람을 무게 순으로 정렬시킨 후, (가장 무거운 사람(peo.. 더보기
[Lv2]삼각달팽이(C++) 1. 문제 programmers.co.kr/learn/courses/30/lessons/68645 코딩테스트 연습 - 삼각 달팽이 5 [1,2,12,3,13,11,4,14,15,10,5,6,7,8,9] 6 [1,2,15,3,16,14,4,17,21,13,5,18,19,20,12,6,7,8,9,10,11] programmers.co.kr 2. 접근 방법 1) 규칙을 찾기 어려워서 단순 구현으로 생각했음 2) 아래 -> 옆 -> 위 방식으로 값을 채우고, 값을 채우는 개수가 처음 아래 방향으로 N개, 우측 방향으로 N-1개, 위 방향으로 N-2개..처럼 채우는 개수를 하나씩 줄이는 규칙을 발견했다. 3) cnt : (아래,옆,위) 방향으로 갈 "개수", num : 배열에 넣을 "값",minCnt : 해당 방.. 더보기
[Lev.2] 수식 최대화(C++) 1. 문제 https://programmers.co.kr/learn/courses/30/lessons/67257 코딩테스트 연습 - 수식 최대화 IT 벤처 회사를 운영하고 있는 라이언은 매년 사내 해커톤 대회를 개최하여 우승자에게 상금을 지급하고 있습니다. 이번 대회에서는 우승자에게 지급되는 상금을 이전 대회와는 다르게 다음과 � programmers.co.kr 2. 접근 방법 1) 우선 "숫자"와 "연산자"를 나누어 준다. 2) 연산자 별 우선순위 경우의 수를 next_permutation으로 만들어서 각 경우의 수 별로 연산을 수행한다. 3) 우선순위에 해당하는 연산자를 발견하면, 연산자 기준 양 옆의 숫자를 연산하여 연산 결과를 다시 list에 넣는다. -> 중간에 삽입/삭제가 자주 있으므로 lis.. 더보기
[Lev.3] 경주로 건설 1. 문제 https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 2. 접근 방법 1. dfs 혹은 bfs로 풀 수 있다. 나는 재귀 연습을 .. 더보기