코테 준비-문제풀기 37

Dynamic Programming

[기록용] - 최대부분 증가수열 예를 들어, 원소가 2, 7, 5, 8, 6, 4, 7, 12, 3 이면 가장 길게 증가하도록 원소들을 차례대로 뽑아내면 2, 5, 6, 7, 12를 뽑아내어 길이가 5인 최대 부분 증가수열을 만들 수 있다 - 각 숫자가 수열의 마지막이라고 했을 때, 만들 수 있는 증가수열의 최대 길이를 기록함 ex) arr[0] = 5 가 마지막이라고 했을 때, 만들 수 있는 증가수열의 최대길이는 1 - 앞에 자신보다 작은 수가 있으면 그 수중 max값을 가져와 +1 을 해준다 static int[] dy; public void solution(int[] arr){ int answer = 0; dy = new int[arr.length]; dy[0] = 1; //해당 숫자를 마지막이라고..

그리디 - JAVA 프로그래머스 풀어보기[테스트용] / 체육복

[기록용] 기록용이므로 자세한 풀이는 설명하지 않습니다 이전에 풀었던 방식은 이중포문을 돌아서 좀 더 간단하게 풀어보기로 함 1) 체육복을 잃어버린 사람은 -1, 갖고있는 사람은 0, 여유분이 있는 사람은 1 로 표기함 2) -1 값을 가진 사람 앞뒤에 여유분이 있는 사람이 있는지 확인 3) 있으면 빌려줘서 둘다 0으로 초기화 4) 없으면 answer 값을 -1 씩 감소 ( 체육복을 못입는 사람이므로) class Solution { public int solution(int n, int[] lost, int[] reserve) { int answer = n; int[] arr = new int[n+2]; // 처음 인덱스와 마지막 인덱스를 0으로 해놓기 위함 for(int i : lost){ arr[i]..

Greedy

[ 기록용 ] - 씨름 선수 문제 키/몸무게가 본인보다 큰 사람이 있으면 탈락함 N명의 지원자가 주어지면 위의 선발원칙으로 최대 몇 명의 선수를 선발할 수 있는지 알아내는 프로그램 1) 먼저 키 순서대로 정렬함 2) 몸무게를 비교하는데, 처음 값을 max로 넣어줌 3) 다음부터는 몸무게만 비교하면됨 / 이전보다 어차피 키는 작으니 몸무게가 max값보다 작으면 탈락 4) 몸무게가 max보다 크면 통과해서 cnt++ 해주고, max값 업데이트 * 키, 몸무게를 넣어주기 위해 Body 클래스 생성 -> sort할때, '키' 기준으로 sort할 수 있도록 compareTo 메소드 오버라이딩함 class Body implements Comparable{ public int h, w; Body(int h, int ..

해쉬- 학급회장/ 애너그램/ 매출액의 종류 *

- 후보 a,b,c,d,e - 투표용지에 반 학생들이 선택한 후보가 쓰여져있고, 학급 회장을 출력하는 문제 - getOrDefault를 활용함 public char solution(int n, String s){ char answer; HashMap map = new HashMap(); for(char x : s.toCharArray()){ map.put(x, map.getOrDefault(x,0) + 1); } int max - Integer.MIN_VALUE; for(char key : map.keySet()){ if(map.get(key) > max){ max = map.get(key); answer = key; } } return answer; } - 애너그램 두 string을 받아서 애너그램 조..

프로그래머스 - 전화번호 목록 (자바/java)

https://chbuljumeok1997.tistory.com/58 프로그래머스 - 해시/ 전화번호 목록 JAVA programmers.co.kr/learn/courses/30/lessons/42577?language=java 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가. chbuljumeok1997.tistory.com [ 기록용 ] 기존에 풀었던 것과 다르게 풀어보려고 함 * 해시로 풀고 싶었지만 해시가 효율성이 더 떨어지는 것 같아 우선 새로운 방식으로 풀어보려고 합니다 - startsWith 사용 : 비교대상 문자열이 입력된 문자열 값으로 시작되는지 여부를 확인해 boolean(true/false) ..

프로그래머스 - 완주하지 못한 선수_해시맵(HashMap) 사용해 풀기

https://programmers.co.kr/learn/courses/30/lessons/42576 이 문제를 다시 풀어봤는데 난 여전히 sort를 사용해 풀었고, 더 좋은 알고리즘을이 있을 것 같아 여러개 찾아봄 찾아 보다 좋은 풀이가 있어서 해당 풀이로 문제를 풀어보고자 함 => 참고로 sort 사용해서 풀었을 때 보다 훨씬 빠름 - getOrDefault getOrDefault(Object key, V DefaultValue) : 찾는 키가 존재하면 찾는 키의 값을 반환하고 아니면 default값 반환 1) hashmap 에 participant 의 선수들을 key로 설정해 +1 씩 증가시켜 넣어줌 -> 동명이인이 있을 수 있기 때문에 중복 처리를 해줘야함 -> 이때 getOrDefault 를 사..

프로그래머스 완주하지 못한 선수 - java ver

해당문제는 c++로 푼적은 있는데 자바로 푼적은 없어서 기억을 살릴겸 풀어봤다. * 효율성 체크를 하는 문제기 때문에 무작정 완전탐색을 이용하면 안될 것 같다.. https://programmers.co.kr/learn/courses/30/lessons/42576?language=java 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr - 단순하게 참가자 배열과 완주자 배열을 정렬하고, 비교해 다른게 있으면 리턴하도록 했다. * 참가자 배열의 크기가 더 크기때문에 ArrayIndexOutO..

프로그래머스 - 그리디/ 큰 수 만들기/ 자바 /java

programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 programmers.co.kr keepgoing0328.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%ED%81%B0-%EC%88%98-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%9E%90%EB%B0%94 [ 프로그래머스 ] 큰 수 만들기 ( 자바) [ 프로그래머스 ] 큰 수 만들기 ( java) 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, keepgoin..

프로그래머스 - dp / 등굣길 / 자바 java

programmers.co.kr/learn/courses/30/lessons/42898?language=java 코딩테스트 연습 - 등굣길 계속되는 폭우로 일부 지역이 물에 잠겼습니다. 물에 잠기지 않은 지역을 통해 학교를 가려고 합니다. 집에서 학교까지 가는 길은 m x n 크기의 격자모양으로 나타낼 수 있습니다. 아래 그림은 m = programmers.co.kr 이문제는 자주 보고 외워두는 것이 좋을 것 같다. dp는 자주 푸는게 답인듯 하다.. 그림으로 잘 설명되어있는 블로그 참고 velog.io/@ajufresh/%EB%93%B1%EA%B5%A3%EA%B8%B8 [프로그래머스] 등굣길 문제풀이 (Java) https://programmers.co.kr/learn/courses/30/lessons..