Lv 2. 할인행사
·
Algorithm & Data Structures/Programers
이문제.. 이해하는게 힘들었다. 결론은 한번의 회원가입으로 내가원하는 제품들을 모두 할인해서 10일안에 살수있는 날짜 수를 찾아야 했다.처음부터 모두 2중반복문으로 하려고 하였으나 최대한 깔끔하게 이해되기 쉽게끔 작성하려고 노력했다.Map.getOrDefault() 사용할 수 있는 좋은 기회였다. 덕분에 코드가 조금더 깔끔해 질 수 있었던 것 같다.import java.util.*;public class p할인행사 { public static HashMap wantMap = new HashMap(); public static HashMap nowMap = new HashMap(); public int solution(String[] want, int[] number, String[] di..
Lv 2. 귤고르기
·
Algorithm & Data Structures/Programers
map의 getOrDefault()  함수와 list 의 reversOrder() 정렬을 이용하여 풀었다.getOrDefault는 두가지 파라미터를 입력받으며1번째 인자로 값을 가져와야하는 key 값을 2번째 인자로 key값이 없을때 반환할 기본값을 입력받는다.그리고 key값이 존재한다면 key값을 반환하고 없으면 2번째 인자를 return 받는다. 아주 유용한 함수인데 잘 알고 있지 못했다import java.util.*;import java.io.*;class Solution { public int solution(int k, int[] tangerine) { int cnt =0 , sum=0; Map map = new HashMap(); for(int nu..
Lv 2. 멀리뛰기
·
Algorithm & Data Structures/Programers
딱 보자마자 그리면 답이 나올것 같았고 그려보니 답을 알 수 있었다.dp[n] = dp[n-1]+dp[n-2] 의 공식이 성립되는 피보나치 수열 문제였다.class Solution { public long solution(int n) { long dp[] = new long[2001]; dp[0]=0; dp[1]=1; dp[2]=2; if(n
Lv 2. 구명보트
·
Algorithm & Data Structures/Programers
Greedy 알고리즘을 이용하여 풀 수 있는 문제였다.처음에는 1에서 최대 50000까지의 루프 탐색을 25000번 해야하나 했지만 아닌거같아서 중간점을 찾아 중간에서부터 탐색을 진행하여 탐색수를 절반이하로 줄여야 하나 고민했다.정렬을 하고나니 굳이 중간점을 쓸 필요도 없을것 같아 양 끝에서 i와 j를 각각 최소값 i 최댓값 j 로 정한다음 i+j 가 limit 이 넘는다면 j 만 -해주고 answer 수 1 증가 limit 보다 적다면 i는 + j는 - 해주고 answer수 1증가 시켜서 푸는 방법을 고안하였다.import java.util.*;class p구명보트 { public int solution(int[] people, int limit) { int answer = 0, j..
Lv 2. 점프와 순간이동
·
Algorithm & Data Structures/Programers
점프를 하였을 때 사용되는 에너지가 0이기에 홀수일때는 -1을하고 짝수일때는 /2를 하여 에너지를 최소한으로 사용하면서 이동하는 방법을 생각해 내었다.  import java.util.*;public class p점프와순간이동 { public int solution(int n) { int cnt = 0, num = n; while(n != 0) { if(n%2==1){ n-=1; cnt+=1; } else{ n/=2; } } return cnt; }}
Lv 2. 예상대진표
·
Algorithm & Data Structures/Programers
문제를 보았을 때 숫자로 임의의 a, b 의 위치를 상상하고 그 숫자를 이용하여 쉽게 나타낼 수 있는 방법을 %와 /연산자로 고려해본 결과 쉽게 알고리즘을 유추 할 수 있었다.class p예상대진표{ public int solution(int n, int a, int b) { int answer = 0; while(true){ a = (a%2) + (a/2); b = (b%2) + (b/2); answer+=1; if(a==b) break; } return answer; }}
Lv 2. N개의 최소공배수
·
Algorithm & Data Structures/Programers
class Solution { public int solution(int[] arr) { int answer =0; if(arr.length == 1) return arr[0]; int g = gcd(arr[0], arr[1]); answer = (arr[0] * arr[1]) / g; if(arr.length > 2) { for(int i = 2; i < arr.length; i++) { g = gcd(answer, arr[i]); answer = (answer * arr[i]) / g; } } return answer; } private static int gcd(int a, int b) { int r = a % b; if(r == 0) return b; else return gcd(b, r); } }
Lv 2. 카펫
·
Algorithm & Data Structures/Programers
import java.util.*; class p카펫 { public int[] solution(int brown, int yellow) { int[] answer = {0,0}; int totalSum = brown+yellow; Map m = new HashMap(); for(int i = 3 ; i
Lv 2. 짝지어 제거하기
·
Algorithm & Data Structures/Programers
처음 풀었던 방식은 while 과 for 문 등의 2중 반복문으로 하였으나 시간초과가 떠서 stack 을 이용한 풀이를 생각해보고 풀어보았다. Stack 이라는 자료구조가 얼른 익숙해져서바로 나와야 할텐데 걱정이 크다. import java.util.*; class p짝지어제거하기 { public int solution(String s) { char[] arr = s.toCharArray(); Stack st = new Stack(); for(int i = 0 ; i < s.length() ; i++){ char c = arr[i]; if(st.isEmpty()) st.push(c); else{ if(st.peek()==c) st.pop(); else st.push(c); } } return st.isE..
Lv 2. 다음 큰 숫자
·
Algorithm & Data Structures/Programers
문자열에 포함된 1의 갯수가 몇개인지 파악하는 과정에서 상당한 귀찮음이 예상되었는데 replace 함수를 사용하니 훨씬더 간단하고 편했다. import java.io.*; import java.util.*; class Solution { public int solution(int n) { int answer = 0; boolean find = false; answer = n; int count = 0,anscnt; count = Integer .toBinaryString(n) .replace("0","") .length(); while(true){ if(find) break; answer += 1; anscnt = Integer .toBinaryString(answer) .replace("0","") ...