문제 

Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums. If target exists, then return its index. Otherwise, return -1.

You must write an algorithm with O(log n) runtime complexity.

 

 

입출력

Example 1:

Input: nums = [-1,0,3,5,9,12], target = 9

Output: 4

Explanation: 9 exists in nums and its index is 4

 

Example 2:

Input: nums = [-1,0,3,5,9,12], target = 2

Output: -1

Explanation: 2 does not exist in nums so return -1

 

 

제약

Constraints:

  • 1 <= nums.length <= 10^4
  • -10^4 < nums[i], target < 10^4
  • All the integers in nums are unique.
  • nums is sorted in ascending order.

 

 

코드

var search = function(nums, target) {
    for(i=0; i<nums.length; i++) {
        if(nums[i] === target) {
            return i;
        }
    }
    return -1;
};



 

 

  • html 코드는 작은 따옴표(‘)로 감싸는 것이 좋음
let html = '<div class="box_title">제목 영역<div>';

 

  • 영어로 된 문장은 큰 따옴표(“)로 감싸는 것이 좋음
let desc = "It's 3 o'clock.";

 

  • backtick(`)을 통해 변수와 표현식을 나타낼 수 있음
let name = 'Angel';

let result = `My name is ${name}.` //“My name is Angel.”

let add = `2 더하기 3은 ${2+3}입니다.` //“2 더하기 3은 5입니다.”

 

  • backtick은 여러 줄을 포함할 수 있음
let desc = `오늘은 맑고 화창한
날씨가 계속되겠습니다.
내일은 비 소식이 있습니다.`;

let desc2 = '오늘은 맑고 화창한\n날씨가 되겠습니다.';

 →  큰 따옴표나 작은 따옴표를 사용할 경우에는 \n을 사용

 

let desc3 = '오늘은 맑고 화창한 
날씨가 계속되겠습니다.
내일은 비 소식이 있습니다.' //error 발생

 →  backtick 예시와 같이 줄 바꿈을 하면 에러가 발생함

 

 

length: 문자열 길이

let desc = '안녕하세요.';

desc.length; //6

 

특정 위치에 접근 (0부터 시작)

let desc = '안녕하세요.';

desc[2]; //“하”
desc[4] = '용'; //desc는 그대로 ‘안녕하세요.’로 값이 변경되지 않음

 

toUpperCase() / toLowerCase(): 영어의 경우, 대문자/소문자로 변환

let desc = "Hi guys. Nice to meet you.";

desc.toUpperCase(); //“HI GUYS. NICE TO MEET YOU.”
desc.toLowerCase(); //“hi guys. nice to meet you.”

 

str.indexOf(txt, n): str의 인덱스 n부터 탐색을 시작하여 찾아낸 txt의 위치 반환

let desc = "Hi guys. Nice to meet you.";

desc.indexOf('to'); //14
desc.indexOf('of') //-1

 →  찾는 문자가 없으면 -1을 반환

 →  찾는 문자를 여러 곳에 포함하고 있어도 첫 번째 위치만 반환

 

 if(desc.indexOf('Hi')) {
	console.log('Hi가 포함된 문장입니다.');
}

 →  이렇게 하면 desc.indexOf(‘Hi’)0이기 때문에 false가 돼서 Hi가 포함된 문장임에도 콘솔을 찍을 수 없음.

 

if(desc.indexOf('Hi') > -1) {
	console.log('Hi가 포함된 문장입니다.');
}

 →  이것처럼 조건문에 indexOf() -1보다 큰 경우로 해줘야 함

 

 

str.includes(txt, n): str의 인덱스 n부터 시작하여 txt를 포함하면 true, 포함하지 않으면 false 반환

  -  대소문자 구분   

let desc = "Hi guys. Nice to meet you.";

desc.includes('to'); //true
desc.includes('to', 16); //false
desc.includes('nice'); //false

 

 

str.slice(n, m): 특정 범위(n부터 m까지)의 문자열 반환

  -  n undefined면 인덱스 0부터

  -  n이 음수면 끝을 0으로 하여 인덱스 n-1부터

  -  m을 생략하면 인덱스 n부터 문자열 끝까지 반환

  -  m이 양수면 시작을 0으로 하여 인덱스 m-1까지

  -  m이 음수면 끝을 0으로 하여 인덱스 m까지

let desc = "abcdefg";

desc.slice(2); //“cdefg”
desc.slice(-2); //“fg”
desc.slice(1, 5); //“bcde”
desc.slice(2, -2); //“cde”
desc.slice(-3, 6); //“ef”

     

 

str.substring(n, m): nm사이의 문자열 반환

  -  slice와 유사하지만 m n을 바꿔도 동작

  -  음수는 0으로 인식

let desc = "abcdefg";

desc.substring(2, 5); //“cde”
desc.substring(5, 2); //“cde”

        

 

str.substr(n, m): n부터 시작하여 m개의 문자열 반환

  -  nslice와 같음

let desc = "abcdefg";

desc.substr(2, 4); //“cdef”
desc.substr(-4, 2); //“de”

 

 

str.trim(): str의 앞 뒤 공백을 제거한 문자열 반환

let desc = "  c o d ing    ";

desc.trim(); //“c o d ing”

 

str.repeat(n): strn번 반복한 문자열 반환

let hello = "hello!";

hello.repeat(3); //“hello!hello!hello!”

 

 

문자열 비교

"a" < "c" //true (아스키코드 기준)

"a".codePointAt(0); //97

 →  codePointAt(0)에서 0은 문자열 인덱스 위치

 

 String.fromCodePoint(97); //“a”

 

 

 

 

↓[코딩앙마] 자바스크립트 중급 강좌 링크

https://www.youtube.com/watch?v=G360D6lqrfo 

 

 

 

toString(): 10진수를 2진수/16진수로 변환

let num = 10;

num.toString(); //”10”
num.toString(2); //“1010”


let num2 = 255;

num2.toString(16); //”ff”

 

Math: 수학과 관련된 프로퍼티와 메소드를 가지고 있는 내장 객체

Math.PI; //3.141592653589793 (원주율)

 

 

Math.ceil(): 올림

let num1 = 5.1;
let num2 = 5.7;

Math.ceil(num1); //6
Math.ceil(num2); //6

     

Math.floor(): 내림

let num1 = 5.1;
let num2 = 5.7;

Math.floor(num1); //5
Math.floor(num2); //5

 

Math.round(): 반올림

let num1 = 5.1;
let num2 = 5.7;

Math.floor(num1); //5
Math.floor(num2); //6

 

 

 

소수점 자릿수 표현

요구사항: 소수점 둘째 자리까지 표현(셋째 자리에서 반올림)

let userRate = 30.1234;

 

방법1) Math.round()

Math.round(userRate * 100) / 100 //30.12

 

방법2) toFixed()

userRate.toFixed(2); //“30.12”

 

ex)         

userRate.toFixed(0); //“30”

userRate.toFixed(6); //“30.123400”

→  toFixed()는 문자열을 반환하기 때문에 Number(userRate.toFixed(2))처럼 숫자로 다시 변환 후 작업하는 경우가 많음

 

 

isNaN(): NaN(Not a Number)인지 아닌지 판단

let x = Number(‘x’);

x == NaN //false
x === NaN //false
NaN == NaN //false

isNaN(x) //true
isNaN(3) //false

→  isNaN을 통해서만 NaN을 판별할 수 있음

 

 

parseInt(): 문자열을 숫자열로 변환

let margin = ‘10px’;

parseInt(margin); //10
Number(margin); //NaN


let redColor = ‘f3’;

parseInt(redColor); //NaN
// parseInt는 읽을 수 있는 만큼 읽고 숫자로 반환, 문자열로 시작하면 NaN 반환

parseInt(redColor, 16); //243
// 두 번째 인수를 받아서 진수를 지정할 수 있음

parseInt(‘11’, 2) //3

 

 

parseFloat(): 문자열을 숫자열(부동소수점)으로 반환

let padding = ’18.5%’;

parseInt(padding); //18
parseFloat(padding) //18.5

 

Math.random(): 01 사이의 무작위 숫자 생성

ex) 0~9 사이의 임의의 숫자를 뽑고 싶다면?

     → Math.floor(Math.random() *10)

 

ex) 0~10 사이의 임의의 숫자를 뽑고 싶다면?

     → Math.floor(Math.random() *11)

 

ex) 1~100 사이 임의의 숫자를 뽑고 싶다면?

     → Math.floor(Math.random() *100) + 1

 

ex) 5~50 사이 임의의 숫자를 뽑고 싶다면?

     → Math.floor(Math.random() *46) + 5

 

Math.max() / Math.min(): 최댓값/최솟값 반환

ex)         Math.max(1, 4, -1, 5, 10, 9, 5.54); 10

              Math.min(1, 4, -1, 5, 10, 9, 5.54); -1

 

Math.abs(): 절대값(absolute value) 반환

Math.abs(-1); //1

 

Math.pow(n, m): nm제곱 반환

Math.pow(2, 10); //1024

 

Math.sqrt(): 제곱근 반환

Math.sqrt(16); //4

 

 

 

 

↓[코딩앙마] 자바스크립트 중급 강좌 링크

https://www.youtube.com/watch?v=ZI6TT93wggA 

 

 

+ Recent posts