반응형

알고리즘 문제 240

N개의 최소공배수 (C#)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr입력받은 배열에 있는 값들의 최소 공배수를 구해주세요.  풀이 방법유클리드 호제법을 이용해서 풀이합니다. 최소 공배수를 구하는 방법은, 두 수의 최대 공약수를 먼저 찾은 이후에 두 수의 곱에 두 수의 최소 공약수를 나눠주면 됩니다. 코드로 풀이하면 아래와 같습니다.int gcd(int a, int b) // 최대 공약수 (유클리드 호제법){ if (b == 0) return a; return gcd(b, a % b);}int lcm(int a, int b) // 최소 공배수{ return a * b / gcd(a, b); // ..

프로그래머스 다음 큰 숫자 (C#)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krN을 입력받을 때, N보다 크면서 비트로 변환 했을 때, 1의 수가 N과 같은 수 중에서 가장 작은 수를 찾아주세요.  풀이 방법While문 안에서 ++N을 하며 비트로 변환해 줍니다. 이후 1의 개수가 같은지 체크하고, 같다면 해당 수를 반환하는 방식으로 풀이합니다. int CountOnes(int num){ return Convert.ToString(num, 2).Split('1').Length - 1;}num을 2진수로 바꾼 후에 1의 개수를 반환하는 함수입니다 int targetCount = CountOnes(n);입력받은 n의 1의 개수를 ta..

프로그래머스 구명보트(C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr구명보트의 한계 중량, 사람들의 몸무게를 입력 받을 때, 모든 사람을 구하기 위해 필요한 구명보트의 수를 구해주세요.  풀이 방법가장 무거운 사람과 가장 가벼운 사람을 같이 태울 수 있는지 체크하며 진행합니다. ex) Limit = 100[30, 50, 50, 70, 80, 90], answer = 0;가장 가벼운 30과 가장 무거운 90은 Limit을 넘기 때문에 같이 태울 수 없습니다.즉, 90은 무조건 혼자만 타야하니 90만 제외해줍니다.(90kg은 10kg이하의 사람과 같이 타야하는데 30kg이 가장 가벼운 몸무게이니 90kg과 같이 태울 수 있는 사..

프로그래머스 괄호 회전하기 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr"( )", "{ }", "[ ]" 소,중,대괄호로 이루어진 문자열을 입력받습니다. 해당 문자열안의 괄호들을 왼쪽으로 x번 만큼 회전 시켰을 때, 올바른 괄호가 되는 x가 몇개인지 찾아주세요."[][][]" => 올바음, "[({})]" => 올바름, "[((]))" => 안됨  풀이 방법괄호 안에는 무조건 올바른 괄호가 들어가있어야 하기 때문에 stack을 이용하여 풀어야합니다. if (c == '(' || c == '[' || c == '{') stk.push(c); 괄호를 여는 문자인 경우 stack에 추가해주고 char top = stk.top(..

프로그래머스 2개 이하로 다른 비트 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr숫자X를 비트로 변환 했을 때, X보다 크고, 비트가 1~2개 다른 수들 중에서 제일 작은 수를 찾아주세요.  풀이 방법X보다 크면서 비트가 1~2개 다른 수들 중 가장 작은 수를 찾는 방법은 3가지 있습니다. 1. 마지막 bit가 0인 경우2. bit들 중에 0이 있는 경우3. 모든 bit가 1로 되어있는 경우 1번의 경우이는 마지막 비트 0을 1로 바꿔주면 해결입니다.10000 -> 10001 2번의 경우에는 가장 오른쪽에 있는 0을 1로 바꾸고 그 오른쪽에 있을 1을 0으로 바꿔주면 됩니다.10001 -> 10010 3번의 경우에는 가장 왼쪽에 있는 1..

프로그래머스 모음사전 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr알파벳 모음 A, E, I, O, U만을 이용해서 만들 수 있는 길이 5 이하의 모든 단어를 저장하고 있는 사전이 있습니다.단어를 입력 받을 때, 해당 단어가 사전의 몇번째 위치에 저장되어 있는치 구해주세요.(단어 저장 순서는 A, AA, AAA, AAAA ,AAAAA, AAAAE, AAAAI . . . . . )  풀이 방법규칙을 찾아서 풀어줍니다.AAAAA = 5AAAAE = 6AAAAI = 7 AAAAO = 8 AAAAU = 95번째 알파벳은 1씩 증가하는 규칙이 있습니다. AAAA -> 4 AAAE = 10AAAI = 16 AAAO = 22 AAAU ..

프로그래머스 전력망을 둘로 나누기 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr송전탑의 개수 N, 연결된 전선의 정보 wires를 입력 받습니다. 전선들 중 하나를 끊어서 송전탑 개수가 가능한 비슷하도록 두 전력망으로 나누었을 때, 두 전력망이 가지고 있는 송전탑 개수의 차이를 구해주세요. 풀이 방법Union-Find 알고리즘을 사용해서 풀이합니다. 이중 for문을 통해 모든 전선(0~ N)이 끊어진 경우에 대해서 탐색을 하고가장 비슷 전력망의 크기를 찾습니다. for (int i = 0; i 끊어진 전선(j == i)를 제외하고 전선의 시작 지점과 종료지점을 Union함수를 이용하여 합쳐줍니다.  map m; for (int n..

프로그래머스 n^2 배열 자르기 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krN * N 크기의 배열이 있습니다. 배열의 left 에서 right까지 포함되는 수를 모두 출력해주세요N이 3인 경우 배열은 아래와 같습니다.[1, 2, 3] [2, 2, 3][3, 3, 3]각 index에 번호를 부여하면 아래와 같습니다.[0, 1, 2][3, 4, 5][6, 7, 8]left가 2고 right가 5라면 [3, 2, 2, 3]을 출력합니다. 풀이 방법배열을 미리 만들어놓고 left~right 까지 찾으면 안됩니다. 그렇게 하면 시간초과에 의해서 실패합니다.그렇기 때문에 해당 번호에 무슨 숫자가 들어있는지 한번에 찾을 필요가 있습니다.[1, ..

프로그래머스 피로도 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr피로도 K와 던전의 [최소 필요 피로도, 소모 피로도]가 담긴 배열을 입력 받을 때, 피로도 K로 돌 수 있는 가장 많은 던전의 수를 구해주세요.ex) K = 8, dungeons = [[80, 30], [50, 40], [30, 10]] 을 입력 받을 때,1번 -> 2번 던전을 돌면 3번 던전에 입장하지 못하지만 1번->3번->2번 순서로 돌면 3개의 던전 모두 돌 수 있습니다. 풀이 방법깊이 우선 탐색을 이용하여 모든 경우의 수를 탐색하는 방법을 사용합니다. 모든 던전에 입장할 수 없을 때 까지 탐색을 진행하고 탐색이 종료되는 시점에 가장 많이 입장한 횟..

프로그래머스 k진수에서 소수 개수 구하기 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr숫자 N과 진수 K를 입력 받습니다. 10진수인 N을 K진수로 변환했을 때,아래 조건에 맞는 소수의 개수를 찾아주세요 0P0처럼 소수 양쪽에 0이 있는 경우P0처럼 소수 오른쪽에만 0이 있고 왼쪽에는 아무것도 없는 경우0P처럼 소수 왼쪽에만 0이 있고 오른쪽에는 아무것도 없는 경우P처럼 소수 양쪽에 아무것도 없는 경우단, P는 각 자릿수에 0을 포함하지 않는 소수입니다.예를 들어, 101은 P가 될 수 없습니다. 풀이 방법해당 문제에서 해결 해야하는 것은1. N을 K진수로 변환하기2. 0 사이의 숫자 찾기3. 해당 숫자가 소수인지 확인하기 1번은 아래 코드로..

반응형