관리 메뉴

CASSIE'S BLOG

Leetcode Two Sum 본문

PROGRAMMING/코테

Leetcode Two Sum

ITSCASSIE1107 2024. 3. 12. 20:41

 

 

 

위 내용은 "Two Sum" 문제에 대한 설명입니다. 이 문제는 주어진 정수 배열에서 두 수를 선택하여 그 합이 목표값이 되는 인덱스를 찾는 문제입니다. 여기서는 같은 요소를 두 번 사용할 수 없다는 제약이 있습니다.

예를 들어,

  • 첫 번째 예시에서는 nums 배열에서 2와 7을 선택하여 그 합이 9가 되는 인덱스를 찾으면 됩니다.
  • 두 번째 예시에서는 3과 2를 선택하여 그 합이 6이 되는 인덱스를 찾으면 됩니다.
  • 세 번째 예시에서는 3과 3을 선택하여 그 합이 6이 되는 인덱스를 찾으면 됩니다.

해당 문제의 해결 방법은 여러 가지가 있을 수 있으나, 주로 해시맵을 활용하여 두 수의 차이를 계산하고 이를 이용하여 인덱스를 찾는 방법이 많이 사용됩니다.

 

정답

 

 

내가...

 

 

 

 

 

 

 

 

 

 

 

죄송합니다. 설명이 올바르지 않았습니다. 저의 오해가 있었습니다. 다시 설명을 하겠습니다.

첫 번째 코드에서는 다음과 같이 동작합니다.

  • i = 0일 때, 내부 반복문은 j가 i+1인 1부터 4까지 반복하며 2 + 4, 2 + 6, 2 + 8, 2 + 10을 확인합니다.
  • i = 1일 때, 내부 반복문은 j가 i+1인 2부터 4까지 반복하며 4 + 6, 4 + 8, 4 + 10을 확인합니다.
  • i = 2일 때, 내부 반복문은 j가 i+1인 3부터 4까지 반복하며 6 + 8, 6 + 10을 확인합니다.
  • i = 3일 때, 내부 반복문은 j가 i+1인 4부터 4까지 반복하며 8 + 10을 확인합니다.

첫 번째 코드에서는 외부 반복문이 nums.length - 1까지 반복되고, 내부 반복문은 외부 반복문의 현재 인덱스(i) 다음 요소부터 시작하여 배열의 끝까지 반복됩니다. 따라서 외부 반복문이 nums.length - 1까지 반복해도 모든 요소 쌍을 확인할 수 있습니다.

두 번째 코드에서는 외부 반복문이 배열의 길이만큼 모두 반복됩니다. 따라서 첫 번째와 동일한 방식으로 동작합니다.

 
You
i가 4인거를 굳이 확인안해도 되는 이유가뭔데? 내부 for문에서 하니까?
 

맞습니다. 제가 설명한 내용이 잘못되었습니다. 죄송합니다.

 

내부 반복문에서 j가 i+1부터 시작하기 때문에, 외부 반복문이 nums.length - 1까지만 반복해도 모든 요소 쌍을 확인할 수 있습니다. 왜냐하면 마지막 요소를 확인하는 경우는 내부 반복문에서 이미 확인되었기 때문에 외부 반복문에서는 다시 확인할 필요가 없기 때문입니다.

따라서 첫 번째 코드에서 외부 반복문이 nums.length - 1까지 반복하는 것은 내부 반복문에서 이미 마지막 요소까지 확인하기 때문에 그 다음 요소부터 시작하는 것입니다.

 

 

split('') 메서드는 주어진 문자열을 한 글자씩 분할하여 배열로 반환합니다. 따라서 "hello".split('')['h', 'e', 'l', 'l', 'o']와 같이 문자열을 각각의 문자로 분할한 후 배열로 반환합니다. 이를 활용하면 주어진 문자열을 한 글자씩 접근할 수 있습니다.

 

이 코드의 작동 방식은 다음과 같습니다:

주어진 숫자 x를 문자열로 변환합니다.
split('') 메서드를 사용하여 문자열을 각각의 문자로 분할합니다.
reverse() 메서드를 사용하여 문자열의 순서를 뒤집습니다.
join('') 메서드를 사용하여 각 문자를 합쳐서 하나의 문자열로 만듭니다.
이렇게 얻은 뒤집은 문자열과 원래의 문자열을 === 연산자를 사용하여 비교합니다.
이 코드의 장점은 간결하고 직관적이며, 자바스크립트에서 제공하는 문자열 메서드를 이용하여 팰린드롬을 확인하는 방법입니다.

그러나 이 코드는 숫자를 문자열로 변환하고, 이를 배열로 변환하여 뒤집은 다음 다시 문자열로 만들기 때문에 추가적인 메모리를 사용합니다. 또한, 숫자를 문자열로 변환하는 것은 처리 속도가 느릴 수 있습니다.

더 효율적인 방법으로는 숫자를 직접 역순으로 만들어서 비교하는 방법이 있습니다. 이 방법은 숫자의 각 자릿수를 추출하여 새로운 숫자를 만들어 비교합니다. 이러한 방법은 더욱 효율적이며, 추가적인 메모리 사용이 없습니다.

반응형