diff --git a/1-js/05-data-types/03-string/1-ucfirst/solution.md b/1-js/05-data-types/03-string/1-ucfirst/solution.md
index 2a478f69dc..390b9ae2e7 100644
--- a/1-js/05-data-types/03-string/1-ucfirst/solution.md
+++ b/1-js/05-data-types/03-string/1-ucfirst/solution.md
@@ -8,16 +8,7 @@ let newStr = str[0].toUpperCase() + str.slice(1);
그런데 이렇게 코드를 작성하면 `str`이 비어있는 문자열인 경우 `str[0]`이 `undefined`가 되는 문제가 발생합니다. `undefined`는 `toUpperCase()`메서드를 지원하지 않으므로 에러가 발생하죠.
-<<<<<<< HEAD
-두 가지 방법을 사용해 이런 예외사항을 처리 할 수 있습니다.
-
-1. `str.charAt(0)`은 `str`이 비어있는 문자열이더라도 항상 문자열을 반환하므로, 이 메서드를 사용합니다.
-2. 빈 문자열인지를 확인하는 코드를 작성합니다.
-
-두 번째 방법을 사용하여 작성한 답안은 아래와 같습니다.
-=======
-The easiest way out is to add a test for an empty string, like this:
->>>>>>> upstream/master
+가장 간단한 해결 방법은 아래처럼 빈 문자열인지 확인하는 조건을 추가하는 것입니다.
```js run demo
function ucFirst(str) {
@@ -27,4 +18,4 @@ function ucFirst(str) {
}
alert( ucFirst("john") ); // John
-```
+```
\ No newline at end of file
diff --git a/1-js/05-data-types/03-string/3-truncate/solution.md b/1-js/05-data-types/03-string/3-truncate/solution.md
index 48364a0a07..444dbea469 100644
--- a/1-js/05-data-types/03-string/3-truncate/solution.md
+++ b/1-js/05-data-types/03-string/3-truncate/solution.md
@@ -1,14 +1,10 @@
새로 만든 문자열의 길이는 `maxlength`가 되어야 하므로, 생략 부호 `"…"`가 차지할 길이를 생각하여 함수를 만들어야 합니다.
-<<<<<<< HEAD
-생략 부호는 유니코드에 등록된 독립된 글자임에 유의하여 답안을 작성해야 합니다. 점 세 개가 아님에 유의하시기 바랍니다.
-=======
-Note that there is actually a single Unicode character for an ellipsis. That's not three dots.
->>>>>>> upstream/master
+생략 부호는 유니코드에 등록된 하나의 문자입니다. 점 세 개가 아님에 유의하세요.
```js run demo
function truncate(str, maxlength) {
return (str.length > maxlength) ?
str.slice(0, maxlength - 1) + '…' : str;
}
-```
+```
\ No newline at end of file
diff --git a/1-js/05-data-types/03-string/article.md b/1-js/05-data-types/03-string/article.md
index d7e2ea32f5..29f20c9bb5 100644
--- a/1-js/05-data-types/03-string/article.md
+++ b/1-js/05-data-types/03-string/article.md
@@ -48,15 +48,9 @@ let guestList = "손님: // Error: Invalid or unexpected token
* John";
```
-<<<<<<< HEAD
작은따옴표나 큰따옴표로 문자열을 표현하는 방식은 자바스크립트가 만들어졌을 때부터 있었습니다. 이때는 문자열을 여러 줄에 걸쳐 작성할 생각조차 못 했던 시기였죠. 백틱은 그 이후에 등장한 문법이기 때문에 따옴표보다 다양한 기능을 제공합니다.
-백틱은 '템플릿 함수(template function)'에서도 사용됩니다. func`string` 같이 첫 번째 백틱 바로 앞에 함수 이름(`func`)을 써주면, 이 함수는 백틱 안의 문자열 조각이나 표현식 평가 결과를 인수로 받아 자동으로 호출됩니다. 이런 기능을 '태그드 템플릿(tagged template)'이라 부르는데, 태그드 템플릿을 사용하면 사용자 지정 템플릿에 맞는 문자열을 쉽게 만들 수 있습니다. 태그드 템플릿과 템플릿 함수에 대한 자세한 내용은 MDN [문서](mdn:/JavaScript/Reference/Template_literals#Tagged_templates)에서 확인해보세요. 참고로 이 기능은 자주 사용되진 않습니다.
-=======
-Single and double quotes come from ancient times of language creation, when the need for multiline strings was not taken into account. Backticks appeared much later and thus are more versatile.
-
-Backticks also allow us to specify a "template function" before the first backtick. The syntax is: func`string`. The function `func` is called automatically, receives the string and embedded expressions and can process them. This feature is called "tagged templates", it's rarely seen, but you can read about it in the MDN: [Template literals](mdn:/JavaScript/Reference/Template_literals#Tagged_templates).
->>>>>>> upstream/master
+백틱은 '템플릿 함수(template function)'에서도 사용됩니다. func`string` 같이 첫 번째 백틱 바로 앞에 함수 이름(`func`)을 써주면, 이 함수는 백틱 안의 문자열 조각이나 표현식 평가 결과를 인수로 받아 자동으로 호출됩니다. 이런 기능을 '태그드 템플릿(tagged template)'이라 부릅니다. 태그드 템플릿과 템플릿 함수에 대한 자세한 내용은 [템플릿 리터럴](mdn:/JavaScript/Reference/Template_literals#Tagged_templates)에서 확인해보세요. 참고로 이 기능은 자주 사용되진 않습니다.
## 특수 기호
@@ -65,17 +59,10 @@ Backticks also allow us to specify a "template function" before the first backti
```js run
let guestList = "손님:\n * John\n * Pete\n * Mary";
-<<<<<<< HEAD
alert(guestList); // 손님 리스트를 여러 줄에 걸쳐 작성함
```
따옴표를 이용해 만든 여러 줄 문자열과 백틱을 이용해 만든 여러 줄 문자열은 표현 방식만 다를 뿐 차이가 없습니다.
-=======
-alert(guestList); // a multiline list of guests, same as above
-```
-
-As a simpler example, these two lines are equal, just written differently:
->>>>>>> upstream/master
```js run
let str1 = "Hello\nWorld"; // '줄 바꿈 기호'를 사용해 두 줄짜리 문자열을 만듦
@@ -87,56 +74,28 @@ World`;
alert(str1 == str2); // true
```
-<<<<<<< HEAD
-자바스크립트엔 줄 바꿈 문자를 비롯한 다양한 '특수' 문자들이 있습니다.
+자바스크립트엔 줄 바꿈 문자를 비롯한 다양한 특수 문자들이 있습니다.
특수 문자 목록:
-=======
-There are other, less common special characters:
->>>>>>> upstream/master
| 특수 문자 | 설명 |
|-----------|-------------|
-<<<<<<< HEAD
|`\n`|줄 바꿈|
-|`\r`|캐리지 리턴(carriage return). Windows에선 캐리지 리턴과 줄 바꿈 특수 문자를 조합(`\r\n`)해 줄을 바꿉니다. 캐리지 리턴을 단독으론 사용하는 경우는 없습니다. |
+|`\r`|캐리지 리턴(carriage return). Windows에선 캐리지 리턴과 줄 바꿈 특수 문자를 조합(`\r\n`)해 줄을 바꿉니다. 반면 Windows가 아닌 운영체제에서 단순히 `줄 바꿈(\n)`만 사용합니다. 이는 역사적인 이유 때문이며, 대부분의 Windows 소프트웨어는 `줄 바꿈(\n)`을 이해합니다. |
|`\'`, `\"`|따옴표|
|`\\`|역슬래시|
|`\t`|탭|
-|`\b`, `\f`, `\v`|각각 백스페이스(Backspace), 폼 피드(Form Feed), 세로 탭(Vertical Tab)을 나타냅니다. 호환성 유지를 위해 남아있는 기호로 요즘엔 사용하지 않습니다. |
-|`\xXX`|16진수 유니코드 `XX`로 표현한 유니코드 글자입니다(예시: 알파벳 `'z'`는 `'\x7A'`와 동일함). |
-|`\uXXXX`|UTF-16 인코딩 규칙을 사용하는 16진수 코드 `XXXX`로 표현한 유니코드 기호입니다. `XXXX`는 반드시 네 개의 16진수로 구성되어야 합니다(예시: `\u00A9`는 저작권 기호 `©`의 유니코드임).
-|`\u{X…XXXXXX}`(한 개에서 여섯 개 사이의 16진수 글자)|UTF-32로 표현한 유니코드 기호입니다. 몇몇 특수한 글자는 두 개의 유니코드 기호를 사용해 인코딩되므로 4바이트를 차지합니다. 이 방법을 사용하면 긴 코드를 삽입할 수 있습니다.|
-
-유니코드를 사용한 예시:
-
-```js run
-alert( "\u00A9" ); // ©
-alert( "\u{20331}" ); // 佫, 중국어(긴 유니코드)
-alert( "\u{1F60D}" ); // 😍, 웃는 얼굴 기호(긴 유니코드)
-```
+|`\b`, `\f`, `\v`|각각 백스페이스(Backspace), 폼 피드(Form Feed), 세로 탭(Vertical Tab)을 나타냅니다. 호환성 유지를 위해 남아있는 기호로 요즘엔 사용하지 않으므로 지금은 크게 신경 쓰지 않아도 됩니다. |
모든 특수 문자는 '이스케이프 문자(escape character)'라고도 불리는 역슬래시 (backslash character) `\`로 시작합니다.
-역슬래시는 문자열 내에 따옴표를 넣을 때도 사용할 수 있습니다.
-=======
-|`\n`|New line|
-|`\r`|In Windows text files a combination of two characters `\r\n` represents a new break, while on non-Windows OS it's just `\n`. That's for historical reasons, most Windows software also understands `\n`. |
-|`\'`, `\"`, \\`|Quotes|
-|`\\`|Backslash|
-|`\t`|Tab|
-|`\b`, `\f`, `\v`| Backspace, Form Feed, Vertical Tab -- mentioned for completeness, coming from old times, not used nowadays (you can forget them right now). |
-
-As you can see, all special characters start with a backslash character `\`. It is also called an "escape character".
-
-Because it's so special, if we need to show an actual backslash `\` within the string, we need to double it:
+역슬래시는 특별한 의미를 가지기 때문에, 문자열 안에 실제 역슬래시 `\`를 표시하려면 두 번 입력해야 합니다.
```js run
-alert( `The backslash: \\` ); // The backslash: \
+alert( `The backslash: \\` ); // 역슬래시: \
```
-So-called "escaped" quotes `\'`, `\"`, \\` are used to insert a quote into the same-quoted string.
->>>>>>> upstream/master
+따옴표를 '이스케이프'한 `\'`, `\"`, \\`는 동일한 종류의 따옴표로 감싼 문자열 안에 따옴표를 넣을 때 사용됩니다.
예시:
@@ -146,29 +105,13 @@ alert( 'I*!*\'*/!*m the Walrus!' ); // *!*I'm*/!* the Walrus!
위 예시에서 살펴본 바와 같이 문자열 내의 따옴표엔 `\`를 꼭 붙여줘야 합니다. 이렇게 하지 않으면 자바스크립트는 해당 따옴표가 문자열을 닫는 용도로 사용된 것이라 해석하기 때문입니다.
-<<<<<<< HEAD
-이스케이프 문자는 문자열을 감쌀 때 사용한 따옴표와 동일한 따옴표에만 붙여주면 됩니다. 문자열 내에서 좀 더 우아하게 따옴표를 사용하려면 아래와 같이 따옴표 대신 백틱으로 문자열을 감싸주면 됩니다.
-=======
-Of course, only the quotes that are the same as the enclosing ones need to be escaped. So, as a more elegant solution, we could switch to double quotes or backticks instead:
->>>>>>> upstream/master
+이스케이프 문자는 문자열을 감쌀 때 사용한 따옴표와 동일한 따옴표에만 붙여주면 됩니다. 문자열 내에서 좀 더 우아하게 따옴표를 사용하려면 아래와 같이 큰따옴표나 백틱으로 문자열을 감싸주면 됩니다.
```js run
alert( "I'm the Walrus!" ); // I'm the Walrus!
```
-<<<<<<< HEAD
-역슬래시 `\`는 문자열을 정확하게 읽기 위한 용도로 만들어졌으므로 `\`는 제 역할이 끝나면 사라집니다. 메모리에 저장되는 문자열엔 `\`가 없습니다. 앞선 예시들을 실행했을 때 뜨는 `alert` 창을 통해 이를 확인할 수 있습니다.
-
-그렇다면 문자열 안에 역슬래시 `\`를 보여줘야 하는 경우엔 어떻게 해야 할까요?
-
-`\\`같이 역슬래시를 두 개 붙이면 됩니다.
-
-```js run
-alert( `역슬래시: \\` ); // 역슬래시: \
-```
-=======
-Besides these special characters, there's also a special notation for Unicode codes `\u…`, it's rarely used and is covered in the optional chapter about [Unicode](info:unicode).
->>>>>>> upstream/master
+이러한 특수 문자 외에도 유니코드 코드를 나타내는 특별한 표기법 `\u…`가 있습니다. 자주 사용되지는 않으며, [유니코드](info:unicode) 선택 챕터에서 다루겠습니다.
## 문자열의 길이
@@ -183,20 +126,12 @@ alert( `My\n`.length ); // 3
```warn header="`length`는 프로퍼티입니다."
자바스크립트 이외의 언어를 사용했던 개발자들은 `str.length`가 아닌 `str.length()`로 문자열의 길이를 알아내려고 하는 경우가 있습니다. 하지만 원하는 대로 동작하지 않습니다.
-<<<<<<< HEAD
-`length`는 함수가 아니고, 숫자가 저장되는 프로퍼티라는 점에 주의하시기 바랍니다. 뒤에 괄호를 붙일 필요가 없습니다.
-=======
-Please note that `str.length` is a numeric property, not a function. There is no need to add parenthesis after it. Not `.length()`, but `.length`.
->>>>>>> upstream/master
+`length`는 함수가 아니고, 숫자가 저장되는 프로퍼티라는 점에 주의하시기 바랍니다. 뒤에 괄호를 붙일 필요가 없습니다. 따라서 `.length()`처럼 괄호를 붙이지 않고 `.length`로 사용합니다.
```
## 특정 글자에 접근하기
-<<<<<<< HEAD
-문자열 내 특정 위치인 `pos`에 있는 글자에 접근하려면 `[pos]`같이 대괄호를 이용하거나 [str.charAt(pos)](mdn:js/String/charAt)라는 메서드를 호출하면 됩니다. 위치는 0부터 시작합니다.
-=======
-To get a character at position `pos`, use square brackets `[pos]` or call the method [str.at(pos)](mdn:js/String/at). The first character starts from the zero position:
->>>>>>> upstream/master
+문자열 내 특정 위치인 `pos`에 있는 글자에 접근하려면 `[pos]`같이 대괄호를 이용하거나 [str.at(pos)](mdn:js/String/at)라는 메서드를 호출하면 됩니다. 첫 번째 문자의 위치는 0부터 시작합니다.
```js run
let str = `Hello`;
@@ -210,28 +145,17 @@ alert( str[str.length - 1] ); // o
alert( str.at(-1) );
```
-<<<<<<< HEAD
-근래에는 대괄호를 이용하는 방식을 사용합니다. `charAt`은 하위 호환성을 위해 남아있는 메서드라고 생각하시면 됩니다.
+보시다시피 `.at(pos)` 메서드는 `pos`에 음수를 전달해 사용할 수 있다는 장점이 있습니다. `pos`가 음수이면 문자열의 끝에서부터 위치를 계산합니다.
-두 접근 방식의 차이는 반환할 글자가 없을 때 드러납니다. 접근하려는 위치에 글자가 없는 경우 `[]`는 `undefined`를, `charAt`은 빈 문자열을 반환합니다.
-=======
-As you can see, the `.at(pos)` method has a benefit of allowing negative position. If `pos` is negative, then it's counted from the end of the string.
+따라서 `.at(-1)`은 마지막 문자를 의미하고, `.at(-2)`는 마지막에서 두 번째 문자를 의미하는 식입니다.
-So `.at(-1)` means the last character, and `.at(-2)` is the one before it, etc.
-
-The square brackets always return `undefined` for negative indexes, for instance:
->>>>>>> upstream/master
+반면 대괄호 표기법은 음수 인덱스에 대해 항상 `undefined`를 반환합니다. 예를 들면 다음과 같습니다.
```js run
let str = `Hello`;
-<<<<<<< HEAD
-alert( str[1000] ); // undefined
-alert( str.charAt(1000) ); // '' (빈 문자열)
-=======
alert( str[-2] ); // undefined
alert( str.at(-2) ); // l
->>>>>>> upstream/master
```
`for..of`를 사용하면 문자열을 구성하는 글자를 대상으로 반복 작업을 할 수 있습니다.
@@ -305,11 +229,7 @@ alert( str.indexOf('widget') ); // -1, indexOf는 대·소문자를 따지므로
alert( str.indexOf("id") ); // 1, "id"는 첫 번째 위치에서 발견됨 (Widget에서 id)
```
-<<<<<<< HEAD
`str.indexOf(substr, pos)`의 두 번째 매개변수 `pos`는 선택적으로 사용할 수 있는데, 이를 명시하면 검색이 해당 위치부터 시작됩니다.
-=======
-The optional second parameter allows us to start searching from a given position.
->>>>>>> upstream/master
부분 문자열 `"id"`는 위치 `1`에서 처음 등장하는데, 두 번째 인수에 `2`를 넘겨 `"id"`가 두 번째로 등장하는 위치가 어디인지 알아봅시다.
@@ -380,48 +300,6 @@ if (str.indexOf("Widget") != -1) {
}
```
-<<<<<<< HEAD
-#### 비트 NOT 연산자를 사용한 기법
-
-오래전부터 전해 오는 [비트(bitwise) NOT 연산자](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT) `~`를 사용한 기법 하나를 소개해드리겠습니다. 비트 NOT 연산자는 피연산자를 32비트 정수로 바꾼 후(소수부는 모두 버려짐) 모든 비트를 반전합니다.
-
-따라서 `n`이 32비트 정수일 때 `~n`은 `-(n+1)`이 됩니다.
-
-예시:
-
-```js run
-alert( ~2 ); // -3, -(2+1)과 같음
-alert( ~1 ); // -2, -(1+1)과 같음
-alert( ~0 ); // -1, -(0+1)과 같음
-*!*
-alert( ~-1 ); // 0, -(-1+1)과 같음
-*/!*
-```
-
-위 예시에서 본 바와 같이 부호가 있는 32비트 정수 `n` 중, `~n`을 `0`으로 만드는 경우는 `n == -1`일 때가 유일합니다.
-
-이를 응용해서 `indexOf`가 `-1`을 반환하지 않는 경우를 `if ( ~str.indexOf("...") )`로 검사해 봅시다.
-
-이렇게 `~str.indexOf("...")`를 사용하면 코드의 길이를 줄일 수 있습니다.
-
-```js run
-let str = "Widget";
-
-if (~str.indexOf("Widget")) {
- alert( '찾았다!' ); // 의도한 대로 동작합니다.
-}
-```
-
-사실 이렇게 언어 특유의 기능을 사용해 직관적이지 않은 코드를 작성하는 것을 추천해 드리진 않습니다. 그렇지만 위와 같은 기법은 오래된 스크립트에서 쉽게 만날 수 있기 때문에 알아두어야 합니다.
-
-`if (~str.indexOf(...))` 패턴의 코드를 만나면 '부분 문자열인지 확인'하는 코드라고 기억해둡시다.
-
-참고로 `-1` 이외에도 `~` 연산자 적용 시 `0`을 반환하는 숫자는 다양합니다. 아주 큰 숫자에 `~` 연산자를 적용하면 32비트 정수로 바꾸는 과정에서 잘림 현상이 발생하기 때문이죠. 이런 숫자 중 가장 큰 숫자는 `4294967295`입니다(`~4294967295`는 `0`임). 문자열이 아주 길지 않은 경우에만 `~` 연산자가 의도한 대로 작동한다는 점을 알고 계시길 바랍니다.
-
-모던 자바스크립트에선 `.includes` 메서드(아래에서 배움)를 사용해 부분 문자열 포함 여부를 검사합니다. 이런 기법은 오래된 자바스크립트에서만 볼 수 있습니다.
-
-=======
->>>>>>> upstream/master
### includes, startsWith, endsWith
비교적 근래에 나온 메서드인 [str.includes(substr, pos)](mdn:js/String/includes)는 `str`에 부분 문자열 `substr`이 있는지에 따라 `true`나 `false`를 반환합니다.
@@ -444,13 +322,8 @@ alert( "Widget".includes("id", 3) ); // false, 세 번째 위치 이후엔 "id"
메서드 [str.startsWith](mdn:js/String/startsWith)와 [str.endsWith](mdn:js/String/endsWith)는 메서드 이름 그대로 문자열 `str`이 특정 문자열로 시작하는지(start with) 여부와 특정 문자열로 끝나는지(end with) 여부를 확인할 때 사용할 수 있습니다.
```js run
-<<<<<<< HEAD
-alert( "Widget".startsWith("Wid") ); // true, "Widget"은 "Wid"로 시작합니다.
-alert( "Widget".endsWith("get") ); // true, "Widget"은 "get"으로 끝납니다.
-=======
-alert( "*!*Wid*/!*get".startsWith("Wid") ); // true, "Widget" starts with "Wid"
-alert( "Wid*!*get*/!*".endsWith("get") ); // true, "Widget" ends with "get"
->>>>>>> upstream/master
+alert( "*!*Wid**/!*get".startsWith("Wid") ); // true, "Widget"은 "Wid"로 시작합니다.
+alert( "Wid*!*get*/!*".endsWith("get") ); // true, "Widget"은 "get"으로 끝납니다.
```
## 부분 문자열 추출하기
@@ -485,15 +358,9 @@ alert( "Wid*!*get*/!*".endsWith("get") ); // true, "Widget" ends with "get"
```
`str.substring(start [, end])`
-<<<<<<< HEAD
-: `start`와 `end` *사이*에 있는 문자열을 반환합니다.
+: `start`와 `end` *사이*에 있는 문자열(`end`는 미포함)을 반환합니다.
- `substring`은 `slice`와 아주 유사하지만 `start`가 `end`보다 커도 괜찮다는 데 차이가 있습니다.
-=======
-: Returns the part of the string *between* `start` and `end` (not including `end`).
-
- This is almost the same as `slice`, but it allows `start` to be greater than `end` (in this case it simply swaps `start` and `end` values).
->>>>>>> upstream/master
+ `substring`은 `slice`와 아주 유사하지만 `start`가 `end`보다 커도 괜찮다는 데 차이가 있습니다. 이런 경우 'start`와 `end`값을 서로 바꿔 처리합니다.
예시:
@@ -529,36 +396,22 @@ alert( "Wid*!*get*/!*".endsWith("get") ); // true, "Widget" ends with "get"
alert( str.substr(-4, 2) ); // gi, 끝에서 네 번째 위치부터 글자 두 개
```
-<<<<<<< HEAD
-부분 문자열 추출과 관련된 메서드를 요약해 봅시다.
-=======
- This method resides in the [Annex B](https://tc39.es/ecma262/#sec-string.prototype.substr) of the language specification. It means that only browser-hosted Javascript engines should support it, and it's not recommended to use it. In practice, it's supported everywhere.
+이 메서드는 언어 명세의 [Annex B](https://tc39.es/ecma262/#sec-string.prototype.substr)에 포함되어 있습니다. 즉, 브라우저 환경의 자바스크립트 엔진만 이를 지원하면 되며, 사용은 권장되지 않습니다. 하지만 실제로는 거의 모든 환경에서 지원됩니다.
-Let's recap these methods to avoid any confusion:
->>>>>>> upstream/master
+부분 문자열 추출과 관련된 메서드를 요약해 봅시다.
| 메서드 | 추출할 부분 문자열 | 음수 허용 여부(인수)|
|--------|-----------|-----------|
-<<<<<<< HEAD
| `slice(start, end)` | `start`부터 `end`까지(`end`는 미포함) | 음수 허용 |
-| `substring(start, end)` | `start`와 `end` 사이 | 음수는 `0`으로 취급함 |
-| `substr(start, length)` | `start`부터 `length`개의 글자 | 음수 허용 |
-=======
-| `slice(start, end)` | from `start` to `end` (not including `end`) | allows negatives |
-| `substring(start, end)` | between `start` and `end` (not including `end`)| negative values mean `0` |
-| `substr(start, length)` | from `start` get `length` characters | allows negative `start` |
->>>>>>> upstream/master
+| `substring(start, end)` | `start`와 `end` 사이(`end`는 미포함) | 음수는 `0`으로 취급함 |
+| `substr(start, length)` | `start`부터 `length`개의 글자 | 음수 `start` 허용 |
```smart header="어떤 메서드를 선택해야 하나요?"
모두 사용해도 괜찮습니다. 그런데 `substr`에는 단점이 하나 있습니다. `substr`는 코어 자바스크립트 명세서(ECMA-262 - 옮긴이)가 아닌, 구식 스크립트에 대응하기 위해 남겨 둔 브라우저 전용 기능들을 명시해 놓은 부록 B(Annex B)에 정의되어있습니다. 거의 모든 곳에서 이 메서드가 동작하긴 하지만 브라우저 이외의 호스트 환경에서는 제대로 동작하지 않을 수 있습니다.
-<<<<<<< HEAD
-남은 두 메서드 중 `slice`는 음수 인수를 허용한다는 측면에서 `substring`보다 좀 더 유연합니다. 메서드 이름도 더 짧죠. 따라서 세 메서드 중 `slice`만 외워놓고 사용해도 충분할 것 같습니다.
-=======
-Of the other two variants, `slice` is a little bit more flexible, it allows negative arguments and shorter to write.
+남은 두 메서드 중 `slice`는 음수 인수를 허용한다는 측면에서 `substring`보다 좀 더 유연합니다. 메서드 이름도 더 짧죠.
-So, for practical use it's enough to remember only `slice`.
->>>>>>> upstream/master
+따라서 세 메서드 중 `slice`만 외워놓고 사용해도 충분합니다.
```
## 문자열 비교하기
@@ -581,31 +434,18 @@ So, for practical use it's enough to remember only `slice`.
이런 예외사항 때문에 이름순으로 국가를 나열할 때 예상치 못한 결과가 나올 수 있습니다. 사람들은 `Österreich`가 `Zealand`보다 앞서 나올 것이라 예상하는데 그렇지 않죠.
-<<<<<<< HEAD
-자바스크립트 내부에서 문자열이 어떻게 표시되는지 상기하며 원인을 알아봅시다.
+자바스크립트 내부에서 문자열이 어떻게 표시되는지 상기하며 원인을 알아봅시다.모든 문자열은 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)을 사용해 인코딩되는데, UTF-16에선 모든 글자가 숫자 형식의 코드와 매칭됩니다.
-모든 문자열은 [UTF-16](https://en.wikipedia.org/wiki/UTF-16)을 사용해 인코딩되는데, UTF-16에선 모든 글자가 숫자 형식의 코드와 매칭됩니다. 코드로 글자를 얻거나 글자에서 연관 코드를 알아낼 수 있는 메서드는 다음과 같습니다.
+코드로 글자를 얻거나 글자에서 연관 코드를 알아낼 수 있는 메서드는 다음과 같습니다.
`str.codePointAt(pos)`
-: `pos`에 위치한 글자의 코드를 반환합니다.
+: `pos`에 위치한 글자의 코드를 나타내는 10진수 값을 반환합니다.
```js run
// 글자는 같지만 케이스는 다르므로 반환되는 코드가 다릅니다.
- alert( "z".codePointAt(0) ); // 122
-=======
-To understand what happens, we should be aware that strings in Javascript are encoded using [UTF-16](https://en.wikipedia.org/wiki/UTF-16). That is: each character has a corresponding numeric code.
-
-There are special methods that allow to get the character for the code and back:
-
-`str.codePointAt(pos)`
-: Returns a decimal number representing the code for the character at position `pos`:
-
- ```js run
- // different case letters have different codes
->>>>>>> upstream/master
alert( "Z".codePointAt(0) ); // 90
alert( "z".codePointAt(0) ); // 122
- alert( "z".codePointAt(0).toString(16) ); // 7a (if we need a hexadecimal value)
+ alert( "z".codePointAt(0).toString(16) ); // 7a (16진수 값이 필요한 경우)
```
`String.fromCodePoint(code)`
@@ -613,17 +453,7 @@ There are special methods that allow to get the character for the code and back:
```js run
alert( String.fromCodePoint(90) ); // Z
-<<<<<<< HEAD
- ```
-
- `\u` 뒤에 특정 글자에 대응하는 16진수 코드를 붙이는 방식으로도 원하는 글자를 만들 수 있습니다.
-
- ```js run
- // 90을 16진수로 변환하면 5a입니다.
- alert( '\u005a' ); // Z
-=======
- alert( String.fromCodePoint(0x5a) ); // Z (we can also use a hex value as an argument)
->>>>>>> upstream/master
+ alert( String.fromCodePoint(0x5a) ); // Z (16진수 값을 인수로 사용할 수도 있음)
```
이제 이 배경지식을 가지고 코드 `65`와 `220` 사이(라틴계열 알파벳과 기타 글자들이 여기에 포함됨)에 대응하는 글자들을 출력해봅시다.
@@ -646,27 +476,16 @@ alert( str );
글자는 글자에 대응하는 숫자 형식의 코드를 기준으로 비교됩니다. 코드가 크면 대응하는 글자 역시 크다고 취급되죠. 따라서 `a`(코드:97)는 `Z`(코드:90) 보다 크다는 결론이 도출됩니다.
-<<<<<<< HEAD
- 알파벳 소문자의 코드는 대문자의 코드보다 크므로 소문자는 대문자 뒤에 옵니다.
- `Ö` 같은 글자는 일반 알파벳과 멀리 떨어져 있습니다. `Ö`의 코드는 알파벳 소문자의 코드보다 훨씬 큽니다.
-### 문자열 제대로 비교하기
-=======
-- All lowercase letters go after uppercase letters because their codes are greater.
-- Some letters like `Ö` stand apart from the main alphabet. Here, its code is greater than anything from `a` to `z`.
-
-### Correct comparisons [#correct-comparisons]
->>>>>>> upstream/master
+### 문자열 제대로 비교하기 [#correct-comparisons]
언어마다 문자 체계가 다르기 때문에 문자열을 '제대로' 비교하는 알고리즘을 만드는 건 생각보다 간단하지 않습니다.
문자열을 비교하려면 일단 페이지에서 어떤 언어를 사용하고 있는지 브라우저가 알아야 합니다.
-<<<<<<< HEAD
-다행히도 모던 브라우저 대부분이 국제화 관련 표준인 [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf)를 지원합니다(IE10은 아쉽게도 [Intl.js](https://github.com/andyearnshaw/Intl.js/) 라이브러리를 사용해야 합니다).
-=======
-Luckily, modern browsers support the internationalization standard [ECMA-402](https://www.ecma-international.org/publications-and-standards/standards/ecma-402/).
->>>>>>> upstream/master
+다행히도 모던 브라우저 대부분이 국제화 관련 표준인 [ECMA-402](http://www.ecma-international.org/ecma-402/1.0/ECMA-402.pdf)를 지원합니다
ECMA-402엔 언어가 다를 때 적용할 수 있는 문자열 비교 규칙과 이를 준수하는 메서드가 정의되어있습니다.
@@ -682,137 +501,17 @@ ECMA-402엔 언어가 다를 때 적용할 수 있는 문자열 비교 규칙과
alert( 'Österreich'.localeCompare('Zealand') ); // -1
```
-`localeCompare`엔 선택 인수 두 개를 더 전달할 수 있습니다. 기준이 되는 언어를 지정(아무것도 지정하지 않았으면 호스트 환경의 언어가 기준 언어가 됨)해주는 인수와 대·소문자를 구분할지나 `"a"`와 `"á"`를 다르게 취급할지에 대한 것을 설정해주는 인수가 더 있죠. 자세한 사항은 관련 [페이지](mdn:js/String/localeCompare)에서 확인해 보시기 바랍니다.
-
-<<<<<<< HEAD
-## 문자열 심화
-
-```warn header="심화 학습"
-이번 절에선 문자열을 더 깊게 다룹니다. 이모티콘이나 일부 수학 기호, 상형 문자를 비롯한 희귀 기호 등을 다뤄야 한다면 앞으로 배울 내용이 유용하게 사용될 것입니다.
-
-이런 글자들을 사용할 계획이 없다면 본 절을 넘어가셔도 좋습니다.
-```
-
-### 서로게이트 쌍
-
-자주 사용되는 글자들은 모두 2바이트 코드를 가지고 있습니다. 유럽권 언어에서 사용되는 글자, 숫자, 상형 문자 대다수는 2바이트 표현 체계를 사용합니다.
-
-그런데 2바이트는 65,536(2의 16승 - 옮긴이)개의 조합밖에 만들어내지 못하기 때문에 현존하는 기호를 모두 표현하기에 충분하지 않습니다. 이를 극복하기 위해 사용 빈도가 낮은 기호는 '서로게이트 쌍(surrogate pair)'이라 불리는 2바이트 글자들의 쌍을 사용해 인코딩합니다.
-
-서로게이트 쌍을 사용해 인코딩한 기호의 길이는 `2`입니다.
-
-```js run
-alert( '𝒳'.length ); // 2, 수학에서 쓰이는 대문자 X(그리스 문자 카이 - 옮긴이)
-alert( '😂'.length ); // 2, 웃으면서 눈물 흘리는 얼굴을 나타내는 이모티콘
-alert( '𩷶'.length ); // 2, 사용 빈도가 낮은 중국어(상형문자)
-```
-
-자바스크립트가 만들어졌을 당시엔 서로게이트 쌍은 존재하지 않았습니다. 따라서 자바스크립트는 서로게이트 쌍으로 표현한 기호를 제대로 처리하지 못합니다.
-
-위 예시에서 기호는 하나지만 길이는 `2`인 것을 보고 의아해하실 수 있는데, 이런 이유 때문이죠.
-
-`String.fromCodePoint`와 `str.codePointAt`은 명세서에 추가된 지 얼마 안 된 메서드로, 서로게이트 쌍을 제대로 처리할 수 있는 몇 안 되는 메서드 입니다. 두 메서드가 등장하기 전에는 [String.fromCharCode](mdn:js/String/fromCharCode)와 [str.charCodeAt](mdn:js/String/charCodeAt)을 사용했었는데, 이 메서드들은 `fromCodePoint`, `codePointAt`과 동일하게 동작하지만 서로게이트 쌍은 처리하지 못합니다.
-
-서로게이트 쌍은 두 글자로 취급되기 때문에 기호를 가져오는 게 꽤 까다롭습니다.
-
-```js run
-alert( '𝒳'[0] ); // 이상한 기호가 출력됨
-alert( '𝒳'[1] ); // 서로게이트 쌍의 일부가 출력됨
-```
-
-서로게이트 쌍을 구성하는 글자들은 붙어있을 때만 의미가 있다는 점에 유의해야 합니다. 따라서 위 예시를 실행하면 얼럿창엔 의미 없는 쓰레기 기호가 출력됩니다.
-
-기술적으로 서로게이트 쌍은 서로게이트 쌍에 대응하는 코드를 사용해 감지할 수 있습니다. 글자의 코드가 `0xd800..0xdbff` 사이에 있으면 이 코드는 서로게이트 쌍을 구성하는 첫 번째 글자를 나타낸다는 것을 알 수 있죠. 이 경우 서로게이트 쌍을 구성하는 두 번째 글자의 코드는 반드시 `0xdc00..0xdfff` 사이에 있어야 합니다. 범위 `0xd800..0xdbff`와 `0xdc00..0xdfff`는 표준에서 서로게이트 쌍을 위해 일부러 비워둔 코드입니다.
-
-예시를 살펴봅시다.
-
-```js run
-// charCodeAt는 서로게이트 쌍을 처리하지 못하기 때문에 서로게이트 쌍을 구성하는 부분에 대한 코드를 반환합니다.
-
-alert( '𝒳'.charCodeAt(0).toString(16) ); // d835, 0xd800과 0xdbff 사이의 코드
-alert( '𝒳'.charCodeAt(1).toString(16) ); // dcb3, 0xdc00과 0xdfff 사이의 코드
-```
-
-서로게이트 쌍을 다루는 다양한 방법에 대해선 챕터에서 살펴보겠습니다. 서로게이트 쌍 관련 라이브러리도 있긴 한데 소개해 드릴 만한 라이브러리는 아직까진 없는 상황입니다.
-
-### 발음 구별 기호와 유니코드 정규화
-
-여러 언어에서 베이스가 되는 글자 위나 아래에 발음 구별 기호라 불리는 기호를 붙여 글자를 만듭니다.
-
-`a`를 베이스 글자로, `àáâäãåā`를 만드는 것 같이 말이죠. 이런 '합성' 글자 대부분은 UTF-16 테이블에서 독자적인 코드를 갖습니다. 그런데 모든 합성 글자에 코드가 부여되지는 않습니다. 조합 가능한 글자의 수가 너무 많기 때문입니다.
-
-임의의 조합을 지원하기 위해 UTF-16에선 몇 개의 유니코드 문자를 남겨두었습니다. 베이스 글자 뒤에 하나 혹은 여러 개의 유니코드 문자를 붙여 베이스 글자를 꾸밀 수 있도록 말이죠.
-
-이를 이용하면 베이스 글자 `S` 뒤에 '윗 점'을 나타내는 유니코드 문자(`\u0307`)를 붙여 Ṡ를 만들 수 있습니다.
-
-```js run
-alert( 'S\u0307' ); // Ṡ
-```
-
-발음 구별 기호를 하나 붙인 상태에서 추가 발음 구별 기호가 필요한 경우에도 문제가 없습니다. 필요한 기호의 유니코드 문자를 붙여주기만 하면 됩니다.
-
-Ṡ에 '아래 점'을 나타내는 유니코드 문자(`\u0323`)를 추가해서 'S 위와 아래에 점이 붙게' 해봅시다.
-
-예시:
-
-```js run
-alert( 'S\u0307\u0323' ); // Ṩ
-```
-
-이런 방식은 엄청난 유연성을 제공하는데, 단점도 있습니다. 눈으로 봤을 때는 같은 글자인데 유니코드 조합이 다른 경우가 생깁니다.
-
-예시:
-
-```js run
-let s1 = 'S\u0307\u0323'; // Ṩ, S + 윗 점 + 아랫 점
-let s2 = 'S\u0323\u0307'; // Ṩ, S + 아랫 점 + 윗 점
-
-alert( `s1: ${s1}, s2: ${s2}` );
-
-alert( s1 == s2 ); // 눈으로 보기엔 같은 글자이지만 동등 비교 시 false가 반환됩니다.
-```
-
-이런 문제를 해결하려면 '유니코드 정규화(unicode normalization)'라 불리는 알고리즘을 사용해 각 문자열을 동일한 형태로 '정규화'해야 합니다.
-
-유니코드 정규화 알고리즘은 [str.normalize()](mdn:js/String/normalize)에 구현되어 있습니다.
-
-```js run
-alert( "S\u0307\u0323".normalize() == "S\u0323\u0307".normalize() ); // true
-```
-
-S 위, 아래에 점을 붙이는 사례에선 `normalize()`를 사용하면 세 개의 글자가 하나로 합쳐집니다. `Ṩ`를 나타내는 유니코드 `\u1e68`로 말이죠.
-
-```js run
-alert( "S\u0307\u0323".normalize().length ); // 1
-
-alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
-```
-
-그런데 현실은 항상 이렇지 않습니다. `Ṩ`가 하나의 유니코드로 합쳐지는 것은 UTF-16을 만드는 데 참여한 사람들이 `Ṩ`는 '충분히 나타날 수 있는 사례'라 생각하고, `Ṩ`를 UTF-16 테이블에 포함하고 코드를 부여해놓았기 때문입니다.
-
-실무에선 이 절에서 다룬 내용만으로도 충분하지만, 정규화 규칙과 변형에 대해 더 알고 싶다면 유니코드 표준 부록의 [Unicode Normalization Forms](http://www.unicode.org/reports/tr15/)에 해당 내용이 있으니 참고하시기 바랍니다.
+`localeCompare`엔 선택 인수 두 개를 더 전달할 수 있습니다. 기준이 되는 언어를 지정(아무것도 지정하지 않았으면 호스트 환경의 언어가 기준 언어가 됨)해 주는 인수와 대·소문자를 구분할지나 `"a"`와 `"á"`를 다르게 취급할지에 대한 것을 설정해 주는 인수가 더 있죠. 자세한 사항은 관련 [페이지](mdn:js/String/localeCompare)에서 확인해 보시기 바랍니다.
## 요약
- 자바스크립트엔 세 종류의 따옴표가 있는데, 이 중 하나인 백틱은 문자열을 여러 줄에 걸쳐 쓸 수 있게 해주고 문자열 중간에 `${…}`을 사용해 표현식도 넣을 수 있다는 점이 특징입니다.
-- 자바스크립트에선 UTF-16을 사용해 문자열을 인코딩합니다.
-- `\n` 같은 특수 문자를 사용할 수 있습니다. `\u...`를 사용하면 해당 문자의 유니코드를 사용해 글자를 만들 수 있습니다.
-- 문자열 내의 글자 하나를 얻으려면 대괄호 `[]`를 사용하세요.
+- `\n` 같은 특수 문자를 사용할 수 있습니다.
+- 문자열 내의 글자 하나를 얻으려면 대괄호 `[]`나 `at` 메서드를 사용하세요.
- 부분 문자열을 얻으려면 `slice`나 `substring`을 사용하세요.
- 소문자로 바꾸려면 `toLowerCase`, 대문자로 바꾸려면 `toUpperCase`를 사용하세요.
- `indexOf`를 사용하면 부분 문자열의 위치를 얻을 수 있습니다. 부분 문자열 여부만 알고 싶다면 `includes/startsWith/endsWith`를 사용하면 됩니다.
- 특정 언어에 적합한 비교 기준 사용해 문자열을 비교하려면 `localeCompare`를 사용하세요. 이 메서드를 사용하지 않으면 글자 코드를 기준으로 문자열이 비교됩니다.
-=======
-## Summary
-
-- There are 3 types of quotes. Backticks allow a string to span multiple lines and embed expressions `${…}`.
-- We can use special characters, such as a line break `\n`.
-- To get a character, use: `[]` or `at` method.
-- To get a substring, use: `slice` or `substring`.
-- To lowercase/uppercase a string, use: `toLowerCase/toUpperCase`.
-- To look for a substring, use: `indexOf`, or `includes/startsWith/endsWith` for simple checks.
-- To compare strings according to the language, use: `localeCompare`, otherwise they are compared by character codes.
->>>>>>> upstream/master
이외에도 문자열에 쓸 수 있는 유용한 메서드 몇 가지가 있습니다.
@@ -820,10 +519,6 @@ alert( "S\u0307\u0323".normalize() == "\u1e68" ); // true
- `str.repeat(n)` -- 문자열을 `n`번 반복합니다.
- 이 외의 메서드는 [MDN 문서](mdn:js/String)에서 확인해보시기 바랍니다.
-<<<<<<< HEAD
-정규 표현식을 사용해 문자열을 찾거나 교체해주는 메서드도 여러 개 있는데 이는 아주 큰 주제이기 때문에 별도의 섹션 에서 다루겠습니다.
-=======
-Strings also have methods for doing search/replace with regular expressions. But that's big topic, so it's explained in a separate tutorial section .
+정규 표현식을 사용해 문자열을 찾거나 교체해주는 메서드도 여러 개 있는데 이는 아주 큰 주제이기 때문에 별도의 섹션 에서 다루겠습니다.
-Also, as of now it's important to know that strings are based on Unicode encoding, and hence there're issues with comparisons. There's more about Unicode in the chapter .
->>>>>>> upstream/master
+또한 문자열은 유니코드 인코딩을 기반으로 하기 때문에 문자열 비교 시 관련 문제가 발생할 수 있다는 점도 알아둬야 합니다. 유니코드에 대한 자세한 내용은 챕터에서 다루겠습니다.
diff --git a/1-js/05-data-types/04-array/10-maximal-subarray/solution.md b/1-js/05-data-types/04-array/10-maximal-subarray/solution.md
index 227515185f..046b9f1deb 100644
--- a/1-js/05-data-types/04-array/10-maximal-subarray/solution.md
+++ b/1-js/05-data-types/04-array/10-maximal-subarray/solution.md
@@ -57,15 +57,9 @@ alert( getMaxSubSum([1, 2, 3]) ); // 6
alert( getMaxSubSum([100, -9, 2, -3, 5]) ); // 100
```
-<<<<<<< HEAD
이렇게 구현하면 시간 복잡도가 [O(n2)](https://en.wikipedia.org/wiki/Big_O_notation)이 됩니다. 이는 배열의 크기를 2배 늘리면 알고리즘은 4배나 더 오래 걸린다는 의미입니다.
크기가 큰 배열(1000, 10000 또는 그 이상의 요소를 가진 배열)에 위와 같은 알고리즘을 적용하면 매우 느릴 수 있습니다.
-=======
-The solution has a time complexity of [O(n2)](https://en.wikipedia.org/wiki/Big_O_notation). In other words, if we increase the array size 2 times, the algorithm will work 4 times longer.
-
-For big arrays (1000, 10000 or more items) such algorithms can lead to serious sluggishness.
->>>>>>> upstream/master
# 빠른 해답
@@ -97,8 +91,4 @@ alert( getMaxSubSum([-1, -2, -3]) ); // 0
이 알고리즘은 정확히 한번 배열을 순회하므로 시간 복잡도는 O(n)입니다.
-<<<<<<< HEAD
알고리즘에 대한 상세한 정보는 [최대합 부분 배열 문제](http://en.wikipedia.org/wiki/Maximum_subarray_problem)에서 찾을 수 있습니다. 동작원리에 대해 확실히 이해가 되지 않았다면 위 예제의 알고리즘이 어떻게 동작하는지 찬찬히 살펴보세요. 글을 읽는 것보다 코드를 살펴보는게 훨씬 도움이 될 겁니다.
-=======
-You can find more detailed information about the algorithm here: [Maximum subarray problem](http://en.wikipedia.org/wiki/Maximum_subarray_problem). If it's still not obvious why that works, then please trace the algorithm on the examples above, see how it works, that's better than any words.
->>>>>>> upstream/master
diff --git a/1-js/05-data-types/04-array/2-create-array/task.md b/1-js/05-data-types/04-array/2-create-array/task.md
index 589e0fdae9..5a0985fce9 100644
--- a/1-js/05-data-types/04-array/2-create-array/task.md
+++ b/1-js/05-data-types/04-array/2-create-array/task.md
@@ -6,19 +6,11 @@ importance: 5
배열과 관련된 다섯 가지 연산을 해봅시다.
-<<<<<<< HEAD
1. 요소 "Jazz", "Blues"가 있는 `styles` 배열을 생성합니다.
2. "Rock-n-Roll"을 배열 끝에 추가합니다.
3. 배열 정 중앙에 있는 요소를 "Classics"로 바꿉니다. 가운데 요소를 찾는 코드는 요소가 홀수 개인 배열에서도 잘 작동해야 합니다.
4. 배열의 첫 번째 요소를 꺼내서 출력합니다.
5. "Rap"과 "Reggae"를 배열의 앞에 추가합니다.
-=======
-1. Create an array `styles` with items "Jazz" and "Blues".
-2. Append "Rock-n-Roll" to the end.
-3. Replace the value in the middle with "Classics". Your code for finding the middle value should work for any arrays with odd length.
-4. Strip off the first value of the array and show it.
-5. Prepend `Rap` and `Reggae` to the array.
->>>>>>> upstream/master
단계를 하나씩 거칠 때마다 배열 모습은 아래와 같이 변해야 합니다.
diff --git a/1-js/05-data-types/04-array/article.md b/1-js/05-data-types/04-array/article.md
index 07e3dae52b..2141571847 100644
--- a/1-js/05-data-types/04-array/article.md
+++ b/1-js/05-data-types/04-array/article.md
@@ -153,15 +153,9 @@ In other words, `arr.at(i)`:
스택을 사용하면 가장 나중에 집어넣은 요소가 먼저 나옵니다. 이런 특징을 줄여서 후입선출(Last-In-First-Out, LIFO)이라고 부릅니다. 반면 큐를 사용하면 먼저 집어넣은 요소가 먼저 나오기 때문에 큐는 선입선출(First-In-First-Out, FIFO) 자료구조라고 부릅니다.
-<<<<<<< HEAD
자바스크립트 배열을 사용하면 큐와 스택 둘 다를 만들 수 있습니다. 이 자료구조들은 배열의 처음이나 끝에 요소를 더하거나 빼는 데 사용되죠.
이렇게 처음이나 끝에 요소를 더하거나 빼주는 연산을 제공하는 자료구조를 컴퓨터 과학 분야에선 [데큐(deque, Double Ended Queue)](https://en.wikipedia.org/wiki/Double-ended_queue)라고 부릅니다.
-=======
-Arrays in JavaScript can work both as a queue and as a stack. They allow you to add/remove elements, both to/from the beginning or the end.
-
-In computer science, the data structure that allows this, is called [deque](https://en.wikipedia.org/wiki/Double-ended_queue).
->>>>>>> upstream/master
**아래는 배열 끝에 무언가를 해주는 메서드입니다.**
@@ -233,11 +227,7 @@ alert( fruits );
숫자형 키를 사용함으로써 배열은 객체 기본 기능 이외에도 순서가 있는 컬렉션을 제어하게 해주는 특별한 메서드를 제공합니다. `length`라는 프로퍼티도 제공하죠. 그렇지만 어쨌든 배열의 본질은 객체입니다.
-<<<<<<< HEAD
-이렇게 배열은 자바스크립트의 일곱 가지 원시 자료형에 해당하지 않고, 원시 자료형이 아닌 객체형에 속하기 때문에 객체처럼 동작합니다.
-=======
-Remember, there are only eight basic data types in JavaScript (see the [Data types](info:types) chapter for more info). Array is an object and thus behaves like an object.
->>>>>>> upstream/master
+자바스크립트의 원시 자료형은 여덟 가지뿐입니다(자세한 내용은 [자료형](info:types) 챕터 참고). 배열은 원시 자료형이 아니라 객체에 속하므로 객체처럼 동작합니다.
예시를 하나 살펴봅시다. 배열은 객체와 마찬가지로 참조를 통해 복사됩니다.
@@ -253,11 +243,7 @@ arr.push("배"); // 참조를 이용해 배열을 수정합니다.
alert( fruits ); // 바나나,배 - 요소가 두 개가 되었습니다.
```
-<<<<<<< HEAD
-배열을 배열답게 만들어주는 것은 특수 내부 표현방식입니다. 자바스크립트 엔진은 아래쪽 그림에서처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 방법 이외에도 배열 관련 연산을 더 빠르게 해주는 최적화 기법은 다양합니다.
-=======
-...But what makes arrays really special is their internal representation. The engine tries to store its elements in the contiguous memory area, one after another, just as depicted on the illustrations in this chapter, and there are other optimizations as well, to make arrays work really fast.
->>>>>>> upstream/master
+배열을 배열답게 만들어주는 것은 특수 내부 표현 방식입니다. 자바스크립트 엔진은 아래쪽 그림에서처럼 배열의 요소를 인접한 메모리 공간에 차례로 저장해 연산 속도를 높입니다. 이 방법 이외에도 배열 관련 연산을 더 빠르게 해주는 최적화 기법은 다양합니다.
그런데 개발자가 배열을 '순서가 있는 자료의 컬렉션'처럼 다루지 않고 일반 객체처럼 다루면 이런 기법들이 제대로 동작하지 않습니다.
@@ -295,11 +281,7 @@ fruits.age = 25; // 임의의 이름을 사용해 프로퍼티를 만듭니다.
fruits.shift(); // 배열 맨 앞의 요소를 빼줍니다.
```
-<<<<<<< HEAD
`shift` 메서드를 호출한 것과 동일한 효과를 보려면 인덱스가 `0`인 요소를 제거하는 것만으론 충분하지 않습니다. 제거 대상이 아닌 나머지 요소들의 인덱스를 수정해 줘야 하죠.
-=======
-It's not enough to take and remove the element with the index `0`. Other elements need to be renumbered as well.
->>>>>>> upstream/master
`shift` 연산은 아래 3가지 동작을 모두 수행해야 이뤄집니다.
@@ -417,19 +399,11 @@ alert( arr[3] ); // undefined: 삭제된 기존 요소들이 복구되지 않습
let arr = *!*new Array*/!*("사과", "배", "기타");
```
-<<<<<<< HEAD
-대괄호 `[]`를 사용하면 더 짧은 문법으로 배열을 만들 수 있기 때문에 `new Array()`는 잘 사용되지 않는 편입니다. `new Array()`엔 다루기 까다로운 기능도 있어서 더욱더 그렇습니다.
-=======
-It's rarely used, because square brackets `[]` are shorter. Also, there's a tricky feature with it.
->>>>>>> upstream/master
+대괄호 `[]`를 사용하면 더 짧은 문법으로 배열을 만들 수 있기 때문에 `new Array`는 잘 사용되지 않는 편입니다. `new Array`엔 다루기 까다로운 기능도 있어서 더욱더 그렇습니다.
숫자형 인수 하나를 넣어서 `new Array`를 호출하면 배열이 만들어지는데, 이 배열엔 *요소가 없는 반면 길이는 인수와 같아*집니다.
-<<<<<<< HEAD
-예시를 통해 `new Array()`의 이런 특징이 어떻게 실수를 유발할 수 있는지 알아봅시다.
-=======
-Let's see how one can shoot themselves in the foot:
->>>>>>> upstream/master
+예시를 통해 `new Array`의 이런 특징이 어떻게 실수를 유발할 수 있는지 알아봅시다.
```js run
let arr = new Array(2); // 이렇게 하면 배열 [2]가 만들어질까요?
@@ -439,13 +413,7 @@ alert( arr[0] ); // undefined가 출력됩니다. 요소가 하나도 없는 배
alert( arr.length ); // 길이는 2입니다.
```
-<<<<<<< HEAD
-위 예시에서 확인해 본 것처럼 `new Array(number)`를 이용해 만든 배열의 요소는 모두 `undefined` 입니다.
-
이런 뜻밖의 상황을 마주치지 않기 위해 `new Array`의 기능을 잘 알지 않는 한 대부분의 개발자가 대괄호를 써서 배열을 만듭니다.
-=======
-To avoid such surprises, we usually use square brackets, unless we really know what we're doing.
->>>>>>> upstream/master
## 다차원 배열
@@ -458,11 +426,7 @@ let matrix = [
[7, 8, 9]
];
-<<<<<<< HEAD
-alert( matrix[1][1] ); // 5, 중심에 있는 요소
-=======
-alert( matrix[0][1] ); // 2, the second value of the first inner array
->>>>>>> upstream/master
+alert( matrix[0][1] ); // 2, 첫 번째 내부 배열의 두 번째 값
```
## toString
@@ -497,34 +461,30 @@ alert( "1" + 1 ); // "11"
alert( "1,2" + 1 ); // "1,21"
```
-<<<<<<< HEAD
-## 요약
-=======
-## Don't compare arrays with ==
-
-Arrays in JavaScript, unlike some other programming languages, shouldn't be compared with operator `==`.
+## ==로 배열을 비교하지 마세요
-This operator has no special treatment for arrays, it works with them as with any objects.
+자바스크립트에서 배열은 다른 몇몇 프로그래밍 언어와 달리 `동등 연산자(==)`로 비교하면 안 됩니다.
-Let's recall the rules:
+`==`는 배열을 특별하게 취급하지 않습니다. 배열도 일반 객체처럼 처리됩니다.
-- Two objects are equal `==` only if they're references to the same object.
-- If one of the arguments of `==` is an object, and the other one is a primitive, then the object gets converted to primitive, as explained in the chapter .
-- ...With an exception of `null` and `undefined` that equal `==` each other and nothing else.
+규칙을 다시 떠올려 봅시다.
+- 두 객체는 동일한 객체를 참조할 때만 `==` 비교 결과가 `true`입니다.
+- `==`의 피연산자 중 하나가 객체이고 다른 하나가 원시값이면, 챕터에서 설명한 것처럼 객체가 원시값으로 변환됩니다.
+- 단, `null`과 `undefined`는 예외입니다. 서로에 대해서만 `==` 비교 시 `true`를 반환하고 그 외의 값과 비교했을 때는 `false`를 반환합니다.
-The strict comparison `===` is even simpler, as it doesn't convert types.
+엄격한 비교 연산자 `===`는 더 단순합니다. 타입 변환을 수행하지 않기 때문입니다.
-So, if we compare arrays with `==`, they are never the same, unless we compare two variables that reference exactly the same array.
+따라서 정확히 같은 배열을 참조하는 두 변수를 비교하는 경우가 아니라면, 배열을 `==`로 비교했을 때 두 배열은 절대 같지 않습니다.
-For example:
+예시:
```js run
alert( [] == [] ); // false
alert( [0] == [0] ); // false
```
-These arrays are technically different objects. So they aren't equal. The `==` operator doesn't do item-by-item comparison.
+위 배열들은 엄밀히 말하면 서로 다른 객체입니다. 따라서 같지 않습니다. `==` 연산자는 배열 요소를 하나씩 비교하지 않습니다.
-Comparison with primitives may give seemingly strange results as well:
+원시값과 비교할 때도 이상해 보이는 결과가 나올 수 있습니다.
```js run
alert( 0 == [] ); // true
@@ -532,65 +492,46 @@ alert( 0 == [] ); // true
alert('0' == [] ); // false
```
-Here, in both cases, we compare a primitive with an array object. So the array `[]` gets converted to primitive for the purpose of comparison and becomes an empty string `''`.
+여기서는 두 경우 모두 원시값과 배열 객체를 비교하고 있습니다. 따라서 비교를 위해 배열 `[]`가 원시값으로 변환되며, 빈 문자열 ``이 됩니다.
-Then the comparison process goes on with the primitives, as described in the chapter :
+그 후 비교는 챕터에서 설명한 원시값 비교 규칙에 따라 진행됩니다.
```js run
-// after [] was converted to ''
-alert( 0 == '' ); // true, as '' becomes converted to number 0
+// []가 ''로 변환된 이후
+alert( 0 == '' ); // true, ''가 숫자 0으로 변환됨
-alert('0' == '' ); // false, no type conversion, different strings
+alert('0' == '' ); // false, 타입 변환이 일어나지 않으며 서로 다른 문자열임
```
-So, how to compare arrays?
+그렇다면 배열은 어떻게 비교해야 할까요?
-That's simple: don't use the `==` operator. Instead, compare them item-by-item in a loop or using iteration methods explained in the next chapter.
+간단합니다. `==` 연산자를 사용하지 마세요. 대신 반복문이나 다음 챕터에서 설명할 순회 메서드를 사용해 요소를 하나씩 비교하면 됩니다.
-## Summary
->>>>>>> upstream/master
+## 요약
배열은 특수한 형태의 객체로, 순서가 있는 자료를 저장하고 관리하는 용도에 최적화된 자료구조입니다.
-<<<<<<< HEAD
-- 선언 방법:
-
- ```js
- // 대괄호 (가장 많이 쓰이는 방법임)
- let arr = [item1, item2...];
-
- // new Array (잘 쓰이지 않음)
- let arr = new Array(item1, item2...);
- ```
-
- `new Array(number)`을 호출하면 길이가 `number`인 배열이 만들어지는데, 이 때 요소는 비어있습니다.
-=======
-The declaration:
+선언 방법:
```js
-// square brackets (usual)
+// 대괄호 (가장 많이 쓰이는 방법임)
let arr = [item1, item2...];
-// new Array (exceptionally rare)
+// new Array (잘 쓰이지 않음)
let arr = new Array(item1, item2...);
```
-The call to `new Array(number)` creates an array with the given length, but without elements.
->>>>>>> upstream/master
+`new Array(number)`을 호출하면 길이가 `number`인 배열이 만들어지는데, 이때 요소는 비어 있습니다.
- `length` 프로퍼티는 배열의 길이를 나타내줍니다. 정확히는 숫자형 인덱스 중 가장 큰 값에 1을 더한 값입니다. 배열 메서드는 `length` 프로퍼티를 자동으로 조정해줍니다.
- `length` 값을 수동으로 줄이면 배열 끝이 잘립니다.
-<<<<<<< HEAD
-다음 연산을 사용하면 배열을 데큐처럼 사용할 수 있습니다.
-=======
-Getting the elements:
-
-- we can get element by its index, like `arr[0]`
-- also we can use `at(i)` method that allows negative indexes. For negative values of `i`, it steps back from the end of the array. If `i >= 0`, it works same as `arr[i]`.
+요소에 접근하는 방법:
-We can use an array as a deque with the following operations:
->>>>>>> upstream/master
+- `arr[0]`처럼 인덱스를 사용해 요소를 가져올 수 있습니다.
+- 음수 인덱스를 지원하는 `at(i)` 메서드도 사용할 수 있습니다. `i`가 음수이면 배열 끝에서부터 거슬러 올라가며 요소를 찾습니다. `i>=0`인 경우에는 `arr[i]`와 동일하게 동작합니다.
+
+다음 연산을 사용하면 배열을 데큐처럼 사용할 수 있습니다.
- `push(...items)` -- `items`를 배열 끝에 더해줍니다.
- `pop()` -- 배열 끝 요소를 제거하고, 제거한 요소를 반환합니다.
@@ -602,12 +543,8 @@ We can use an array as a deque with the following operations:
- `for (let item of arr)` -- 배열 요소에만 사용되는 모던한 문법입니다.
- `for (let i in arr)` -- 배열엔 절대 사용하지 마세요.
-<<<<<<< HEAD
- 챕터에선 배열에 요소를 더하거나 빼기, 원하는 요소를 추출하기, 배열 정렬하기 등과 관련된 다양한 메서드를 학습할 예정입니다.
-=======
-To compare arrays, don't use the `==` operator (as well as `>`, `<` and others), as they have no special treatment for arrays. They handle them as any objects, and it's not what we usually want.
+배열을 비교할 때는 `==` 연산자(`>`,`<` 등의 비교 연산자도 마찬가지)를 사용하지 마세요. 이러한 연산자들은 배열을 특별하게 처리하지 않고 일반 객체처럼 다루기 때문에, 우리가 기대하는 방식으로 동작하지 않습니다.
-Instead you can use `for..of` loop to compare arrays item-by-item.
+대신 `for..of` 반복문을 사용해 배열 요소를 하나씩 비교할 수 있습니다.
-We will continue with arrays and study more methods to add, remove, extract elements and sort arrays in the next chapter .
->>>>>>> upstream/master
+ 챕터에선 배열에 요소를 더하거나 빼기, 원하는 요소를 추출하기, 배열 정렬하기 등과 관련된 다양한 메서드를 학습할 예정입니다.
diff --git a/1-js/05-data-types/05-array-methods/2-filter-range/task.md b/1-js/05-data-types/05-array-methods/2-filter-range/task.md
index 3158dc1ca6..bd96e0a3fd 100644
--- a/1-js/05-data-types/05-array-methods/2-filter-range/task.md
+++ b/1-js/05-data-types/05-array-methods/2-filter-range/task.md
@@ -4,11 +4,7 @@
# 특정 범위에 속하는 요소 찾기
-<<<<<<< HEAD
-배열 `arr`의 요소 중 `a`이상 `b` 이하 범위에 속하는 요소만 골라 새로운 배열에 집어넣고, 해당 요소를 출력해주는 함수 `filterRange(arr, a, b)`를 작성해봅시다.
-=======
-Write a function `filterRange(arr, a, b)` that gets an array `arr`, looks for elements with values higher or equal to `a` and lower or equal to `b` and return a result as an array.
->>>>>>> upstream/master
+배열 `arr`의 요소 중 `a` 이상 `b` 이하 범위에 속하는 요소만 골라 새로운 배열에 집어넣고, 해당 요소를 출력해 주는 함수 `filterRange(arr, a, b)`를 작성해 봅시다.
새로 작성하는 함수는 기존 배열 `arr`을 변경하면 안 되고, 반환되는 함수는 새로운 배열이어야 합니다.
diff --git a/1-js/05-data-types/05-array-methods/7-map-objects/solution.md b/1-js/05-data-types/05-array-methods/7-map-objects/solution.md
index 33fae83d9a..b2ac82c1a1 100644
--- a/1-js/05-data-types/05-array-methods/7-map-objects/solution.md
+++ b/1-js/05-data-types/05-array-methods/7-map-objects/solution.md
@@ -24,12 +24,8 @@ usersMapped = [
alert( usersMapped[0].id ); // 1
alert( usersMapped[0].fullName ); // John Smith
```
+화살표 함수 우측에 추가 괄호를 썼다는 점에 주목해 주세요.
-<<<<<<< HEAD
-화살표 함수 우측에 괄호를 썼다는 점에 주목해주시기 바랍니다.
-=======
-Please note that in the arrow functions we need to use additional brackets.
->>>>>>> upstream/master
아래와 같이 괄호 없이 코드를 작성할 수 없습니다.
```js