알고리즘
-
[프로그래머스] 가장 큰 수 - 정렬알고리즘/문제풀기 2019. 5. 1. 23:31
처음 문제를 풀 때 아래의 코드 처럼 새로운 배열을 만들어서 정렬한 후 마지막 배열을 뽑아 오려고 했다. public static String solution(int[] numbers) { String answer = "";//정답을 저장할 문자열 int nlength = numbers.length; int arrlength = 1;//새로운 배열을 저장할 배열크기 String[] str = new String[nlength]; for(int i=0; i
-
[프로그래머스] K번째 수 - 정렬알고리즘/문제풀기 2019. 4. 20. 12:33
새로운 배열에 부분 배열을 저장하고 그 배열을 다시 정렬하는 식으로 풀기 시작했다. 처음엔 쉬운 문제라고 생각했는데 commands배열안에서 부분 시작과 끝을 찾아야한다고 생각하니까 조금 복잡했다. ※ 첫 번째 코드 아래의 코드처럼 temp라는 배열을 반복해서 다시 저장하는 식으로 코드를 짰다. public static int[] solution(int[] array, int[][] commands) { int[] answer = {}; int[] temp = {}; for(int j=0; j
-
[프로그래머스] 위장 - 해시알고리즘/문제풀기 2019. 4. 17. 23:38
문제를 이해하고 경우의 수를 모두 구해야하는 줄 알고 복잡한 문제라고 생각했다. 그런데 질문하기에서 훨씬 접근하기 쉬운 방법을 찾았고 코드를 짜기 시작했다. ※ 문제를 쉽게 해결 할 수 있었던 꿀팁!! 머리:3, 얼굴:2, 옷:1 이라면 총 가능한 개수는 (3+1) * (2+1) * (1+1) -1 = 23 으로 계산 할 수 있다. +1씩 더한 이유는 착용하지 않은 경우를 추가한 것이고, 마지막에 -1을 해준 이유는 모든 부위를 입지 않은 경우는 없기 때문이다. 위 공식을 사용해서 아래처럼 코드를 짰다. class Solution { public int solution(String[][] clothes) { int answer = 0; HashMap clothesmap = new HashMap();//옷..
-
[프로그래머스] 완주하지 못한 선수 - 해시알고리즘/문제풀기 2019. 4. 16. 01:00
중복된 이름이 있을 수가 있어서 Hash를 사용해서 으로 배열을 넣어주었다. 처음엔 participant 배열만 runner에 을 넣고, completion은 배열을 가져와서 이중 for문으로 비교하였다. => 실패 1. 첫 번째 채점 runner와 finish에 같은 이름이 존재하면 각 해시에서 삭제해 주었다. 그리고 남은 runner의 key를 이용해 값을 answer에 저장하였다. 그랬더니 정확성은 통과였지만, 효율성 문제에서 실패하였다. public static String solution(String[] participant, String[] completion) { String answer = ""; Arrays.sort(participant); Arrays.sort(completion); H..