목록배열 (4)
코드 한 줄
* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다. 정수로된 배열이 주어지면, 각 원소가 자기 자신을 제외한 나머지 원소들의 곱셈이 되게하라. 단, 나누기 사용 금지, 시간 복잡도 0(n) 예제 } Input : [1, 2, 3, 4, 5] Output : [120, 60, 40, 30, 24] 여기서 중요한 것은 나누기 사용이 안된다는 것과 O(n) 시간 복잡도여야 한다는 것이다. 여기 input 예제를 보면 Input a = [a[0], a[1], a[2], a[3], a[4]] output = [ a[1]*a[2]*a[3]*a[4], a[0]*a[2]*a[3]*a[4], a[0]*a[1]*a[3]*a[4], a[0]*a[1]*a[2]*a[4], a[0]*a[1]*a[2]*a[3] ] 그럼 여기..
* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다. 정수 배열이 주어지면 0이 아닌 정수의 순서를 유지하며 모든 0을 배열의 오른쪽으로 옮겨라 예제 } Input : [0, 5, 0, 3, -1] Output : [5, 3, -1, 0, 0] Input : [3, 0, 3] Output : [3, 3, 0] 이 문제는 0을 오른쪽으로 옮기는 것보다 0이 아닌 정수를 왼쪽으로 옮긴다고 생각하면 쉽게 풀 수 있다. void solve(int[] input) { int position = 0; // 0이 아닌 정수가 들어갈 곳 for (int i = 0; i < input.length; i++) { if (input[i] != 0) { swap(input, i, position); position++; ..
* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다. 정수 배열이 주어지면 두 번째로 큰 값을 출력하라 예제 } Input : [10, 5, 4, 3, -1] Output : 5 Input : [3, 3, 3] Output : Does not exist. 이 문제는 가장 큰 값을 구하는 로직과 거의 똑같다. 가장 큰 값과 두 번째 큰 값을 저장할 변수를 만들고 배열 원소들과 비교하면 된다. 중요한 엣지 케이스는 배열이 0 이나 1개의 원소를 가지고 있으면 두번째 큰 값이 존재 하지 않는 것과 [3, 3, 3] 같은 경우처럼 두 번째로 큰 값은 존재 하지 않는다. 이를 계산하기 위해 두 번째 큰 값을 저장할 변수를 Integer.MIN_VALUE로 두고 for루프가 끝난 뒤 값이 변했는지 체크하면 된다..
* 본 문제와 풀이의 저작권은 매일프로그래밍에 있습니다. 간격(interval)으로 이루어진 배열이 주어지면, 겹치는 간격 원소들을 합친 새로운 배열을 만들어라. 간격은 시작과 끝으로 이루어져 있으며, 시작은 끝보다 작거나 같다. 예제 } Input : {{2, 4}, {1, 5}, {7, 9}} Output : {{1, 5}, {7, 9}} Input : {{3, 6}, {1, 3}, {2, 4}} Output : {{1, 6}} 문제의 어려운 점은 간격 원소들이 무작위로 순서가 돼있는 것이다. 주로 이런 경우엔 자료구조를 써서 무작위 원소들을 쉽게 정리하거나, 원소들을 정렬하면 된다. 이 문제에선 간격 원소들을 정렬해보겠다. 간격 원소가 {start, end}로 나누어 있다고 가정하고, start로 ..