정렬이란?정렬(sort)이란 사용자가 정의한 순서로 데이터를 나열하는 것이때 사용자가 정의한 순서는 오름차순이나 내림차순일 수도 있고 임의 조건일 수도 있다. 정렬은 원하는 데이터를 쉽게 찾기 위해 필요하다. 예를 들어, 다음의 두 가지 데이터가 있다고 해보자.정렬된 데이터: [1, 3, 5, 7, 9]정렬되지 않은 데이터: [1, 5, 7, 9, 3]여기서 데이터의 중앙값을 찾는다고 할 때 어떤 데이터가 더 찾기 쉬울까?바로 정렬된 데이터이다.정렬된 데이터는 그냥 인덱스의 중앙값만 보면 된다. 반면 정렬되지 않은 데이터는 모든 데이터를 확인하며 찾아야 한다. 이 세상에는 수 많은 정렬 알고리즘이 존재한다.정렬 알고리즘은 시간복잡도로 분류할 수 있는데 지금부터 그 시간 복잡도별로 정렬 알고리즘에 대해 이..
기본 타입(Primitive)의 배열int, double, float등 기본 타입의 배열을 정렬하기 위한 방법은 다음과 같다. 오름차순int[] arr = new int[]{9, 8, 2, 10, 4};Arrays.sort(arr); 내림차순내림차순의 경우 복잡해진다.1. stream을 사용하는 방법int[] arr = {5, 3, 8, 1, 9, 2};// int[] 배열을 Integer[] 배열로 변환Integer[] integerArray = Arrays.stream(arr).boxed().toArray(Integer[]::new);// 배열을 내림차순으로 정렬Arrays.sort(integerArray, Collections.reverseOrder());stream을 통해 객체 타입의 배열로 변환..
1. 문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 2. 풀이 과정모든 취약지점을 점검하기 위해 필요한 최소 친구 수를 구하는 문제이다. 친구를 최대한 적게 투입해야하기 때문에 배치에 신경을 써야한다.나는 처음에 세 가지 제한사항을 뒀다.1. 이동범위가 큰 친구부터 투입일단 이동범위가 큰 친구부터 투입을 해야 최대한 많은 취약 지점을 한번에 수리할 수 있게 된다. 2. 시작은 무조건 취약 지점에서취약 지점인 곳에서 시작을 하면 바로 한 곳을 수리하고 움직일 수 있다. 3. 가능한 케이스 중에서 가장 많은 곳을 수리할 수 있는 케이스를 선택하자.아무래도 ..
1. 문제 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 2. 풀이 과정라이언이 가장 큰 점수차로 우승하는 경우의 점수 리스트를 찾는 문제이다. 큰 점수차를 내기 위해선 최대한 화살을 효율적으로 써야 한다. 즉, 다음의 원칙을 지키며 화살을 쏴야 한다.얻을 점수라면 어피치보다 딱 한발 더 쏜다.버릴 점수라면 한발도 쏘지 않는다.점수는 10~0, 총 11가지이며 각 점수를 얻을 수도 있고 버릴 수도 있다.즉, 각 점수에 대한 선택지는 2가지인 셈이다.이렇게 라이언이 각 점수를 얻거나 버리거나 해서 발생하는 모든 경우의 수를 따져야 한다.모든 경우의 수를 따진다..