문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이n을 나누면서 나머지가 1이 되는 최소 몫을 구하는 문제이다. 1. 1부터 n까지 순회하면서, 나머지가 1이 되는 값을 찾으면 값을 기록하고 for문을 빠져나온다. 2. 기록한 값을 리턴한다. 소스코드class Solution { public int solution(int n) { int x = -1; for (int i = 1; i 실행결과
Problem Solving
문제https://school.programmers.co.kr/learn/courses/30/lessons/134240 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이대회를 위한 음식 배치를 하는 문제이다. 푸드 파이트 대회는 왼쪽, 오른쪽에서 음식을 먹는데 가운데를 기준으로 대칭이 좌측 우측 음식이 대칭되어야한다. 대칭이 되어야 하므로, 한쪽에 음식 배치만 끝나면 나머지는 뒤집으면 된다는 생각을 했다. 1. 1번의 음식부터 순회하면서, 절반만큼의 수만큼 음식의 번호를 문자열에 붙인다. 2. 원본 문자열과 뒤집은 문자열을 구하고, 중간에 "0"을 넣는다. 3. 문자열을 반환한다. 소스코드class Solut..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이X, Y의 문자열에서 공통된 숫자들로 만들 수 있는 최댓값이 되는 수를 만드는 문제이다. 문자열의 길이가 300만이다. 300만개의 숫자 데이터를 저장하는 것은 메모리 사용량이 많을 것이라고 생각했다.그리고 문자열에는 0~9까지의 수만 나올 수 있으므로, 길이가 10인 배열을 선언해 세는 것이 더 좋은 방법이라고 생각했다. 공통된 숫자들의 개수를 구하기 위해서는 두 배열에서 최솟값을 넣으면 공통된 숫자의 개수가 된다.1110(0 : 1개, 1: 3개)1100(0 : 2개, 1: 2개)0은 1개1은 2개가 공통된 수가 되기 때문이다. 1. X, Y 문자열에 ..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이사과의 점수의 배열로 m개씩 사과 상자를 포장해서 최대 이익을 계산하는 문제이다.상자에 담긴 사과 중 가장 낮은 점수(p) * 한 상자 사과 개수(m)이 사과의 가격이다. 최대 이익을 구하려면, 점수가 큰 사과들끼리 상자를 포장하고 그 다음으로 점수가 큰 사과들끼리 상자를 포장하면 최대 이익이라고 생각했다. 1. 사과 점수로 오름차순 정렬을 한다. 2. 사과 점수에서 가장 작다는 것은 사과 묶음 중에서 인덱스가 가장 작은 값이 최소 점수이기 때문에, 최소 점수에 해당하는 인덱스를 score.length - m부터 m을 빼면서 최대 이익을 구한다. (큰 점수..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이1 ~ number까지 가지는 숫자들의 각각 약수의 개수가 공격력이 되는데 공격력을 limit에 따라서 합을 구해주는 문제이다.제일 고민되는 부분은 1 ~ 10만까지의 수들의 약수의 개수를 어떻게 구하지?선형적으로 구하면 되는건가? 라는 생각을 했다. 근데 생각해보면 2의 약수를 구한다고 하면 50000까지의 수만 보면 되고,3의 약수를 구한다고 해보면 33333까지의 수 여기서 뭔가 패턴이 생긴다.선형적으로 1~10만까지 전부 탐색하는 것이 아니라,약수의 개수를 세고 싶은 숫자를 나눈 수 까지만 구하면 된다는 것이다.for (int i = 1; i 1..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이각 매일 마다 가수가 노래를 불러서 점수를 획득하는데, 일마다 상위 k개의 점수 중 가장 낮은 점수를 구하는 문제이다. 상위 k개의 점수 중 가장 낮은 점수?뭔가 정렬을 하거나 우선순위를 가져야겠다는 생각이 든다. 그래서 우선순위 큐에 k개를 유지하면서 가장 낮은 점수를 보여주면 된다고 생각했다.또한 100개의 데이터를 우선순위 큐에 넣고 빼는 연산도 O(100log(100)이므로, 사용해도 된다. 1. 우선순위 큐에 일마다 노래를 부른 점수를 담는다. 2. k개 보다 더 담겨 있으면 가장 낮은 점수를 뺀다. 3. 그리고 k개 중 가장 낮은 점수를 배열에 ..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이맨앞의 문자를 기준으로 다른 문자와 비교해서 개수가 같아질 때, 문자열을 자를 때 개수를 구하는 문제이다. 필자는 이 문제에서 substring 메서드를 사용해서, 자른 문자열을 없애려고 했으나, 문자열의 길이가 10000인 것과 새로운 String 객체를 만드는 것이 많은 메모리 사용량이 있다고 생각했다. 그래서 4개의 변수를 사용해서 문자열을 자르고 갱신하지 않고 풀이했다. 1. 현재 문자, 같은 문자의 개수, 다른 문자의 개수, 현재 인덱스에 대한 변수를 선언한다. 2. 현재 문자를 가져오고, 같은 문자의 개수 1개, 다른 문자의 개수 0개, 현재 문..
문제https://school.programmers.co.kr/learn/courses/30/lessons/12935 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이원본 배열에 있는 수의 순서를 유지하면서 가장 작은 수를 제거한 배열을 리턴하는 문제이다. 1. 원본 배열의 길이를 가져와서 1을 뺐을 때, 비어 있으면 -1을 가진 배열을 리턴한다. 2. 원본 배열의 길이가 2이상일 때, 최솟값을 구해서 최솟값을 제외한 다른 값들을 배열에 담는다. 소스코드class Solution { public int[] solution(int[] arr) { int len = arr.length; ..
문제 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이배열에 있는 2개의 수를 뽑은 합을 구해서 오름차순 정렬하는 문제이다.ArrayList, 동적 배열을 사용해서 합들을 다 담아서 오름차순 정렬하려고 했으나, 수가 겹칠 수 있는 문제가 존재한다.[1,1,1] 이라면[2,2,2]가 아니라 [2]가 되어야하기 때문이다. 그래서 정렬을 유지하면서 값을 중복하지 않게 담을 수 있는 자료구조인 TreeSet을 선택했다. 1. TreeSet으로 배열에서 다른 인덱스에서 뽑은 2개의 수를 더한 값을 담는다. 2. set의 크기만큼 배열을 만든다. 3. 배열에 set에 담겨있는 값을 넣는다. 소스코드import java..
문제https://school.programmers.co.kr/learn/courses/30/lessons/133502 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이재료에 대한 번호가 주어졌을때, 햄버거에 대한 쌍으로 쌓여서 만들 수 있는 개수를 구하는 문제이다. 재료에 대해서 쌓는다고 적혀 있어서 바로 스택을 사용해야겠다는 생각을 했다. 빵이면서, 햄버거를 만들 수 있는 개수가 스택에 있다면쌍을 모두 꺼내서 햄버거를 만들 수 있는지 확인해보면 된다. 첫번째 풀이1. 스택을 선언한다. 2. 현재 스택에 저장되어 있는 재료의 개수가 4개 이상이고, 제일 상위에 있는 재료가 빵이라면 2-1. 4개의 재료를 모..