알고리즘 48

[프로그래머스]의상 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 코니는 변태인가보다..경우의 수를 생각해보면 어떤 한 종류를 아예 안입는 경우까지 생각하면종류의 아이템 개수 + 1 를 전부 곱해주고 싹 다 벗은 경우를 -1 해주면 될 것이다.import java.util.*;class Solution { public int solution(String[][] clothes) { int answer = 1; Map map = new H..

[프로그래머스] 구명보트 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/42885 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 모든 인원 중 가장 무거운 사람과 가벼운 사람을 태워본다.limit를 넘는다면 가장 무거운 사람은 그 누구와도 같이 탈 수 없다.그러므로 가장 무거운 사람만 타야한다.그 다음 2 번 째로 무거운 사람과 가장 가벼운 사람을 태운다.limit 안쪽이라면 그대로 두명을 태우고 이 과정을 반복하면 된다. 배열을 오름차순 정렬하고 양방향으로 데이터를 만질 수 있는 deque를 사용하였다. import java..

[프로그래머스] 가장 많이 받은 선물 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 1레벨짜리 문제가 벌써 풀기 싫어진다.매번 프로그래머스에서 풀때마다 느끼지만 1~2레벨 구분은 별 의미도 없는것 같다..우선 처음 고려해야 할 것은 서로 주고받은 선물의 개수이다.두 번째는 선물지수이다. 이름을 키로 갖고 값을 선물 지수로 갖는 map,서로 선물을 주고받은 데이터를 저장하는 map 두개가 필요하다. 서로 주고받은 선물 개수가 같은 것과 둘다 주고받지 않은것은 같다고 볼 수 있다. i..

[프로그래머스] 혼자놀기의달인 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/131130 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr한 숫자를 뽑으면 하나의 그룹이 생성된다.원리는 어떤 숫자를 뽑으면 마지막으로 그 숫자로 돌아오게 되어있다.카드 한개를 뽑고 그룹의 크기를 저장하고 다시 하나를 뽑아서 카드 덱이 다 뽕빨날때까지 시행한다.이미 뽑힌 숫자라면 다른 그룹에 속해있는 수이니 넘어간다.최종적으로 뽑힌 여러 그룹을 오름차순 정렬해서 2개를 곱해주면 될 것이다.import java.util.ArrayList;import java..

[프로그래머스] 삼각 달팽이 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/68645 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr결국 배열의 인덱스만 잘 조절하면 쉽게 풀 수 있을 것이다. 다소 복잡해보이는 로직은 ide에서 디버깅을 찍어가며 놓치고 있는 부분이 있는지 확인해주면 좋다. import java.util.*;class Solution { public int[] solution(int n) { int[] answer = {}; List list = new ArrayList(); ..

[프로그래머스] 줄 서는 방법-JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/12936 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 모든 경우의 수를 구해서 k번째를 구한다면가장 큰 경우 n이 20 이하이므로 20! 번 반복문을 돌려야한다. 따라서 다 구할수 없고 규칙성을 알아내야한다.첫번째 숫자를 고정하고 나머지를 구한다면 (n-1)!의 경우의 수이고m번째 숫자를 고정한다면 결국 (n-m)!의 경우의 수가 나올 것이다. n이 5일때즉, k가 (5-1)!보다 작다면 첫번째 수는 1로 고정일 것이고 2 * (5-1)!보다 작고  (..

[프로그래머스] 2 x n 타일링 -JAVA

https://school.programmers.co.kr/learn/courses/30/lessons/12900# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제의 접근을 위해 골똘히 생각해 봐야 한다.결국 자연수 n길이의 박스에 길이가 1 또는 2의 막대기를 사용하여 일렬로 나열할수 있는 경우의 수이다. 예를 들어 n이 5라면1111121112213가지 방법으로 이루어져 있다. 그렇다면 2 와 1의 개수 조합을 알고 있다면 조합과 순열을 통해 경우의 수를 구할 수 있을 것이다. 어떤 변수가 몇 개가 필요할까?1의 개수를 담을 int타입의 변수와 2의 ..

[프로그래머스] 124 나라의 숫자 -JAVA

class Solution { public String solution(int n) { String answer = ""; int [] arr = new int[n]; int num = 1; int cnt = 0; String currNum = ""; boolean checkNum = true; for (int i = 0; i   1. n번 반복하는데 문자열에 값을 넣고 문자열 길이만큼 반복하여 각 문자열의 숫자를 체크하고2. checkNum을 통해 while문의 조건으로 사용하여 1, 2, 4 만이 존재하는 숫자가 된다면 배열에 넣어주었다. 코드를 작성하면서 당연히 시간초과나 효율성이 떨어질 것이..

[프로그래머스] 연속된 부분 수열의 합 -java

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int[] solution(int[] sequence, int k) { int[] answer = new int[2]; //sequence값이 들어갈 큐 Queue q1=new LinkedList(); //값을 넣고 뺄 큐 Queue q2=new LinkedList(); //조건에 맞는 시작 인덱스와 끝 인덱..

[프로그래머스] 두 큐 합 같게 만들기 -java

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public long solution(int[] queue1, int[] queue2) { long answer = -1; Queue realQ1=new LinkedList(); Queue realQ2=new LinkedList(); int check=0; long q1=0; long q2=0; for(int i=0;iq..