반응형

알고리즘 문제/프로그래머스 152

프로그래머스 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번은 아래 코드로..

프로그래머스 할인 행사 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krXYZ마트는 하루 한 품목씩 10일동안 할인을 합니다. 정현이가 원하는 제품을 담은 want 배열과 제품의 수량을 나타내는 number, 그리고 할인 품목을 나타내는 discount 배열을 입력받을 때, 정현이가 원하는 제품 모두 할인 받을 수 있는 날의 총 일수를 구해주세요. 풀이 방법map을 이용하여 풀이합니다. map w, d;품목의 이름, 개수를 담은 map을 두개 생성합니다. 하나는 정현이가 원하는 품목, 하나는 현재 할인중인 품목입니다. for (auto p : w){ string name = p.first; int cnt = p.sec..

프로그래머스 연속 부분 수열 합의 개수 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr원형 수열의 모든 원소를 입력 받을 때, 원형 수열의 연속 부분 수열합으로 만들 수 있는 수의 개수를 구해주세요. ex) 7, 9, 1, 1, 4길이가 1인 부분 수열 -> 1, 4, 7, 9길이가 2인 부분 수열 -> 2, 5, 10, 11, 16길이가 3인 부분 수열 -> 6, 11, 12, 17, 20길이가 4인 부분 수열 -> 13, 15, 18, 21길이가 5인 부분 수열 -> 22총-> 18개 풀이 방법중복되는 수가 나올 수 있는 경우를 생각해줘야 합니다.중복을 애초에 제거해주는 set으로 수를 관리하면 이 부분은 쉽게 해결됩니다. set s;fo..

프로그래머스 택배상자 (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr영재는 택배상자를 트럭에 싣는 일을 합니다. 1번 상자부터 N번 상자까지 번호가 증가하는 순서대로 컨테이너 벨트에 실을 수 있고앞뒤로 움직이는 보조 컨테이너 벨트에 임시로 상자를 실을 수도 있습니다. 택배 기사님이 원하는 상자 순서대로 메인 컨테이너 벨트에 상자를 보낼 때, 총 몇개를 보낼 수 있는지 구해주세요.[4, 3, 1, 2, 5]를 입력 받을 때, 첫번 째로 4를 보내기 위해서 보조 벨트에 1, 2, 3을 보내고 메인 벨트에 4를 보냄, 이후 보조 벨트에 3을 꺼내서 보내고 마무리. 총 2개 풀이 방법1. 초기 변수 선언stack s: 스택은 임시로..

프로그래머스 롤케이크 자르기 [Lv.2] (C++)

프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr롤케이크 위에는 여러가지 토핑이 올라가 있습니다. 철수와 동생이 같은 수의 토핑종류를 가지려고 할 때, 케이크를 반으로 나누는 경우의 수가 몇개인지 찾아주세요.[1, 2, 1, 3, 1, 4, 1, 2]를 입력받을 때, [1, 2, 1, 3], [1, 4, 1, 2]로 나눌 수 있고 [1, 2, 1, 3, 1], [4, 1, 2]로 나눌 수 있습니다. 풀이 방법topping의 길이가 최대 1,000,000이기 때문에 시간 초과를 고려해서 문제를 풀어야합니다. 따라서 케이크를 자를 수 있는 위치에서 모든 곳을 순회하여 토핑종류의 수를 구하게되면 안됩니다. Ma..

반응형