정수 배열 nums와 정수 target이 input으로 주어질 때, nums안의 2개 element 합이 target과 같은 element의 index를 구하는 문제입니다.
예시는 다음과 같습니다.
Point
1. 문제의 답은 오직 한 가지 쌍이며, 같은 element를 두 번 사용하지 않는다.
나는 단순하게 풀이를 했다.
Flow 1) 주어진 배열 nums를 정렬한 sortArr에서 합이 target이 되는 element를 탐색
Flow 2) 해당 element의 index를 탐색
class Solution {
public static int INF = 987654321;
public int[] twoSum(int[] nums, int target) {
int[] answer = new int[]{INF, INF};
int[] sortArr = new int[nums.length];
/** Flow 1 */
for(int i=0 ; i<nums.length ; ++i)
sortArr[i] = nums[i];
System.out.println(Arrays.toString(sortArr));
int L=0, R=nums.length-1;
while(true) {
if(sortArr[L]+sortArr[R] > target) {
R--;
}
else if(sortArr[L]+sortArr[R] < target) {
L++;
}
else { // 답을 구한 경우
break;
}
}
/** Flow 2 */
for(int i=0 ; i<nums.length ; ++i) {
if(answer[0] == INF && (nums[i] == sortArr[L] || nums[i] == sortArr[R])) {
answer[0] = i;
}
else if(nums[i] == sortArr[L] || nums[i] == sortArr[R]) {
answer[1] = i;
break;
}
}
return answer;
}
}
역시 단순하게 풀면 최적화된 풀이와 효율성에서 큰 차이가 난다.
소요시간이 가장 짧은 풀이를 확인해보니 nums 배열의 값을 Map에 저장함과 동시에 target과 차를 통해
쌍이 Map에 존재하는지 확인한다. ( Map.containsKey(target-nums[idx]) 대충 이런 느낌 ) => 완벽한 O(n)
반응형
'Computer Science > Problem Solve' 카테고리의 다른 글
LeetCode(릿코드) - Valid Parentheses (0) | 2021.12.05 |
---|---|
LeetCode(릿코드) - Longest Common Prefix (0) | 2021.12.05 |
LeetCode(릿코드) - Roman to Integer (0) | 2021.12.03 |
알고스팟(종만북) - 와일드 카드 (0) | 2021.09.29 |
2021 카카오 인턴십 - 거리두기 확인하기 (0) | 2021.08.27 |
댓글