
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
strings는 길이 1 이상, 50이하인 배열입니다.
strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
모든 strings의 원소의 길이는 n보다 큽니다.
인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
function solution(strings, n) {
var answer = [];
for( i=0; i < strings.length; i++ )
{
strings[i] = strings[i][n] + strings[i];
}
strings.sort();
for( i=0; i < strings.length; i++ )
{
strings[i] = strings[i].replace(strings[i][0], "");
answer.push(strings[i]);
}
return answer;
}
첫번째 반복문 과정을 통해 정렬에 해당하는값과 원래값이 있는 배열을 만들 수 있다.
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
array의 길이는 1 이상 100 이하입니다.
array의 각 원소는 1 이상 100 이하입니다.
commands의 길이는 1 이상 50 이하입니다.
commands의 각 원소는 길이가 3입니다.
function solution(array, commands) {
var answer = [];
for (i = 0; i < commands.length; i++) {
var selectArray = array.slice(commands[i][0] - 1, commands[i][1]);
selectArray.sort((a, b) => a - b);
answer.push(selectArray[commands[i][2] - 1]);
}
return answer;
}
slice는 처음값~마지막값-1한 값을 가져온다. 배열은 0번째부터 시작하고 위의 i는 0번째를 고려하지 않은 것이므로 i번째 값은 -1을 해야 해당하는 array값에서 시작할 것이고 j번째값은 그대로 가져와도 j번째까지 잘릴것이다.
이후 sort를 통해 오름차순정렬을 해주고 해당 배열의 k번째 값을 answer에 넣어주고 return해주면 문제 해결!
JS 유효성 검증을 위한 라이브러리
=> 여러 타입과 규칙을 이용해 유효성을 검증, 검증에 실패 시 오류를 발생.
어떤 것을 검증하는 것.
function is1(value) {
return value === 1;
}
=> 위의 코드의 경우 값이 1인지 아닌지 판단 후 Boolean 타입의 값을 반환하는 함수.(이런 간단한 코드도 검증을 위한 코드가 됨.)
에러를 인자로 전달받아 클라이언트에게 에러 응답을 반환 또는 다음 미들웨어로 에러를 전달하는 역할
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
미들웨어는 등록된 순서대로 실행
=> 라우터 이전에 에러 처리 미들웨어를 등록하면 라우터에서 발생한 에러를 처리할 수가 없음.(라우터에서 발생한 에러가 라우터 이후에 등록된 미들웨어로 전달되므로.)
const config = {
trailingComma: "es5", // ES5에서 제원하는 위치에 쉼표를 추가합니다.
tabWidth: 4, // Tab의 너비를 4 스페이스로 설정합니다.
semi: false, // 세미콜론을 사용하지 않습니다.
singleQuote: true, // 따옴표를 작은 따옴표(')를 사용합니다.
};
export default config;
// 원래 코드
const items = [
'item1',
'item2'
];
// Prettier 규칙을 적용한 후
const items = [
'item1',
'item2',
];es5라는 값은 JavaScript 버전중 하나인 ES5에서 허용되는 부분까지만 콤마를 뒤에 붙이는 규칙입니다.none이라는 값은 가능한 모든 코드에서 코드 뒤에 붙은 콤마를 제거합니다. (에러가 나도록 다 제거하는것은 아닙니다!)all 이라는 값은 ES8 이전의 버전까지 허용되는 모든 부분에 콤마를 붙이도록 합니다.아직 all 규칙에 해당하는 문법을 지원하지 않는 브라우저가 있기 때문에 현재 여러분에게 권장드리는 규칙은 "es5" 혹은 "none" 입니다.
// tabWidth: 2
function foo() {
console.log('Hello, world!');
}
// tabWidth: 4
function foo() {
console.log('Hello, world!');
}true인 경우 세미콜론을 항상 붙이도록 해줍니다.```jsx
// semi: true
const x = 10;
const y = 20;
// semi: false
const x = 10
const y = 20
```false로 하는 경우 위 사진처럼 세미콜론이 모두 제거됩니다.true로 하시길 권장드립니다.// singleQuote: false
const greeting = "Hello, world!";
// singleQuote: true
const greeting = 'Hello, world!';true로 설정해두어 외따옴표(’)를 사용하는것을 권장드립니다.// arrowParens: "avoid"
const square = x => x * x;
// arrowParens: "always"
const square = (x) => x * x;always"로 해두시는걸 권장합니다.모든 파일의 변경 사항을 저장할 수 있는 저장소.
이전 변경사항 기준으로 새로 변경된 내용을 기록하는 단위.
여러 사람이 하나의 저장소에서 작업할 때 작업 내용이 충돌 되지 않도록 해주는 개념.
=> 프로젝트의 특정 시점의 복제본을 만들어 관리하는 것으로 볼 수 있음.
- 1) 작업 디렉토리
개인컴퓨터에서 프로젝트의 파일 수정 및 새로운 파일을 생성하는 작업을 담당.
=> 코드 작성 및 수정하는 작업 수행- 2) 스테이징 영역
프로젝트의 변경 사항이 생기면 'git add' 명렁어를 이용해 변경사항을 스테이징 영역에 저장.
=> 변경사항만 선택적으로 커밋에 포함 가능.- 3) 로컬 저장소
스테이징 영역에 저장된 변경사항을 'git commit' 명령어를 이용해 기록을 남김.
=> 각 커밋은 고유한 ID를 가지며 프로젝트의 버전을 표시- 4) 원격 저장소
로컬 저장소에 저장된 커밋들을 'git push' 명령어를 통해 Github같은 원격 저장소에 업로드.
=> 원격 저장소를 이용해 다른사람 또는 다른장치에서 프로젝트를 공유하고 이어서 작업 가능.
컴퓨터가 통신할 수 있도록 컴퓨터마다 가지는 고유한 주소.
인터넷 전체에서 유일. 해당 주소를 통해 외부에서도 접근이 가능.
네트워크 내부에서만 사용. 외부의 접근이 불가.
데이터가 드나들 수 있는 통로
URL은 우리가 알아보기 쉽게 하는 등의 이유로 IP주소에 별명을 붙이는 것