본문 바로가기

정리/알고리즘53

탐욕법 - 큰 수 만들기 프로그래머스 (탐욕법) - 큰 수 만들기 해당 문제를 풀때에는 처음에는 문제를 제대로 이해 하지 못해 각 자릿수의 수를 구해 number 자리수 - k 자리수의 가장 큰수를 구했었습니다. 이후 문제를 이해해 보니 입력받은 문자의 순서는 유지한채로 k 만큼 수를 제거 했을 때 가장 큰수를 구하는 문제였습니다. 순서를 유지 해야 할 경우 가장 큰 수를 만들려면 앞자리가 가장 큰 것이 중요하기에 앞에서 k번째까지의 수중 가장 큰수가 있는 수까지 과감하게 제거 하는 방향으로 진행했습니다. base case는 제거해야하는 자릿수와 입력받은 숫자의 자릿수가 동일 할 때와 남은 제거해야 하는 수가 없을 경우 2가지로 정해 로직을 구현했습니다. public String solution(String number, int.. 2022. 2. 23.
완전탐색 - 카펫 프로그래머스 (완전탐색) - 카펫 해당 문제는 yellow로 만들 수 있는 사각형의 가로 세로 길이를 구하면 해당 사각형을 감싼 brown 사각형의 가로 세로 길이를 구할 수 있습니다(yellow 가로 + 2, yellow 세로 + 2). 이를 통해 해당 사각형을 감싼 brown의 갯수를 구할 수 있고, 입력받은 brown 갯수와의 비교를 통해 문제가 원하는 brown의 가로 세로 길이를 구할 수 있습니다. 문제에 가로의 길이가 세로의 길이보다 크거나 같다는 제약조건이 있어 시작 Width가 큰것부터 작은순으로 반복문이 돌도록 하였습니다. public int[] solution(int brown, int yellow) { int[] answer = {}; for (int yellowWidth = yell.. 2022. 2. 21.
완전탐색 - 소수찾기 해당 문제는 입력 받은 문자열을 각 하나의 문자 조각으로 나누고 각 문자 조합을 전부 만들어 해당 문자조합이 숫자로 파싱했을때 소수인 경우에만 set에 넣어주도록 했습니다. set은 중복이 없으므로 이후 set의 사이즈를 구함으로서 소수의 갯수를 구할 수 있었습니다. public int solution(String numbers) { Set primeNumberSet = new HashSet(); List splitNumberStrings = new ArrayList(); for(int i = 0; i < numbers.length(); i++) { splitNumberStrings.add(numbers.substring(i, i + 1)); } makeOtherNumber(primeNumberSet, .. 2022. 2. 19.
완전탐색 - 모의고사 프로그래머스 (완전탐색) - 모의고사 해당 문제에서는 수포자의 패턴을 확인하여 패턴 배열을 가진 Giver를 생성해 answers 전체를 돌면서 정답수를 counting 해주었고, 이후 정답수 기준의 우선순위 큐에 넣은 후 빼내면서 정답수가 동일할 경우 가장많은 문제를 맞힌 사람의 id를 저장하는 리스트에 넣었습니다. 앞의 동작을 완료 후 정렬하여 primitive type 배열로 변경하여 리턴해주었습니다. 큐에 순서대로 넣기 때문에 마지막에 정렬을 할 필요는 없어 보이기는 하지만 문제대로 여러명일 경우 오름차순 정렬 하라는 요구사항이 있기 때문에 명시적으로 넣어 주도록 하였습니다. public int[] solution(int[] answers) { List firstRankerIds = new Arr.. 2022. 2. 17.