문제 설명
문제 설명: 정수 배열을 생성자에 전달받는 클래스 ArrayWrapper를 설계하세요. 이 클래스는 두 가지 기능을 가져야 합니다:
- 이 클래스의 두 인스턴스를 + 연산자로 더할 때, 결과는 두 배열의 모든 요소의 합이 되어야 합니다.
- 인스턴스에 대해 String() 함수가 호출되면, 배열을 대괄호로 감싸고 각 요소를 쉼표로 구분한 문자열 형태로 반환해야 합니다. 예를 들어, [1,2,3]과 같은 형태입니다.
예제
예제 1
입력: nums = [[1,2],[3,4]], operation = "Add"
출력: 10
예제 2
입력: nums = [[23,98,42,70]], operation = "String"
출력: "[23,98,42,70]"
예제 3
입력: nums = [[],[]], operation = "Add"
출력: 0
⚠️제약 조건
- •
0 <= nums.length <= 1000 - •
0 <= nums[i] <= 1000 - •
참고: nums는 생성자에 전달된 배열입니다
해결 방법
🎯접근 방식
ArrayWrapper 클래스는 배열의 합산과 문자열 표현을 위해 JavaScript의 valueOf와 toString 메서드를 재정의합니다. valueOf는 배열의 요소를 모두 더해 반환하여 + 연산자 사용 시 두 배열의 합을 계산하고, toString은 배열을 JSON 문자열로 변환해 배열의 문자열 표현을 제공합니다. 핵심 아이디어는 JavaScript의 객체 메서드 재정의를 통해 사용자 정의 객체의 기본 연산을 제어하는 것입니다.
솔루션 코드
복잡도 분석
시간 복잡도:
O(n)공간 복잡도:
O(n)💡상세 설명
이 문제는 ArrayWrapper라는 클래스를 설계하는 것입니다. 이 클래스는 정수 배열을 입력으로 받아 두 가지 기능을 제공합니다: 두 인스턴스를 더할 때 배열의 모든 요소의 합을 반환하고, String() 함수가 호출될 때 배열을 문자열 형태로 반환하는 것입니다.
이제 코드를 단계별로 살펴보겠습니다.
1. 알고리즘의 핵심 아이디어
- 덧셈 연산자 오버로딩: 두
ArrayWrapper인스턴스를 더할 때, 각 인스턴스의 배열 요소의 합을 계산하여 반환합니다. - 문자열 변환:
String()함수가 호출되면 배열을[1,2,3]형태의 문자열로 변환하여 반환합니다.
2. 코드의 주요 로직 설명
- 생성자 (
constructor): 클래스가 생성될 때 배열을 받아서items라는 내부 변수에 저장합니다. valueOf메서드: 덧셈 연산을 수행할 때 호출되며, 배열의 모든 요소의 합을 반환합니다.toString메서드:String()함수가 호출될 때 배열을 문자열로 변환하여 반환합니다.
3. 각 단계별 동작 과정
-
객체 생성:
const obj1 = new ArrayWrapper([1,2]);를 통해obj1이라는 객체를 생성합니다. 이 객체는[1,2]라는 배열을 가지고 있습니다.const obj2 = new ArrayWrapper([3,4]);를 통해obj2라는 객체를 생성합니다. 이 객체는[3,4]라는 배열을 가지고 있습니다.
-
덧셈 연산:
obj1 + obj2를 수행하면valueOf메서드가 호출됩니다.valueOf메서드는this.items.reduce((acc, cur) => acc + cur, 0)를 통해 배열의 요소를 모두 더합니다.obj1의 경우1 + 2 = 3,obj2의 경우3 + 4 = 7이므로, 두 객체를 더하면3 + 7 = 10이 됩니다.
-
문자열 변환:
String(obj1)을 호출하면toString메서드가 호출됩니다.toString메서드는JSON.stringify(this.items)를 사용하여[1,2]형태의 문자열을 반환합니다.
4. 핵심 변수들의 역할
this.items: 각ArrayWrapper인스턴스가 가지고 있는 배열을 저장합니다. 이 배열은 연산의 기본 데이터가 됩니다.
5. 왜 이 방법이 효과적인지
- 간결함:
valueOf와toString메서드를 활용하여 JavaScript의 기본 연산자와 함수의 동작을 오버로딩함으로써, 객체 간의 덧셈과 문자열 변환을 자연스럽게 처리할 수 있습니다. - 재사용성: 클래스를 사용하여 여러 인스턴스를 쉽게 생성하고, 동일한 방식으로 연산을 수행할 수 있습니다.
- 가독성: 코드가 직관적이고, 각 메서드가 명확한 역할을 가지고 있어 유지보수가 용이합니다.
이와 같은 방식으로 ArrayWrapper 클래스를 설계하면, 배열의 합산과 문자열 변환을 쉽게 수행할 수 있습니다.