반응형

전체 글 357

15.가운데 문자 출력(substring, substr)

📌강의정리 홀수면 가운데 하나, 짝수면 가운데에 2개를 출력해야하는 문제이다. Math.floor를 쓰면 내림이니까 몫을 얻을 수 있다. Math.floor(s.length/2)는 홀수이면 가운데의 인덱스번호를 가리킨다. 그 다음 if를 이용해서 %2를 이용해 주어진 문자열의 길이가 홀수인지 짝수인지 판별한다. 홀수이면 s.substring(mid, mid+1); 를 하면 mid부터 mid+1전까지이므로 mid만 나오게 된다. 짝수인경우는 가운데 두개중 높은부분이 mid이므로 s.substring(mid-1, mid+1)을 해야 가운데 두개 (mid-1, mid )가 인덱스기준 주소로 나온다. 또한 substr도 있다. substr(2,4)는 2번 인덱스부터 4개를 뽑아 5번인덱스까지 총 4개를 뽑아내라..

14.가장 긴 문자열

📌강의 정리 n개의 문자열 중에서 가장 긴 문자열을 출력하는 문제이다. 각 문자열의 길이가 다르므로 length를 쓰면 간단히 풀 수 있다. 우선 for문을 한다. max값은 가장 작은 값인 Number.MIN_SAFE_INTEGER; 를 하면 된다. 그 이후에는 max값은 x의 길이, answer는 x의 값을 넣으면 된다. 📌느낀점 아주 쉬운 문제였다. 단지 제일 큰 값과 제일 작은 값을 설정할때 Number.MIN_SAFE_INTEGER; 를 쓴다는 것을 기억하자. Number.MAX_SAFE_INTEGER; //나의 코드 //강사님 코드

13.대소문자변환

📌강의정리 문자 하나하나를 탐색하면서 했는데 원래는 대소문자로 변환하려면 그냥 toUpperCase()를 쓰면 한번에 끝나는 데 하나하나를 탐색했던이유는 이 문제처럼 문자하나하나를 변환하게 하는 코딩테스트 문제가 나오기 때문이다. for(let x of s)로 하나하나 탐색을 한다. 그다음 if(x === x.toUppercase())로 대문자인지 확인이 가능하다. 맞다면 toLowerCase()로 소문자로 바꿔주고 아니라면 else로 대문자로 바꿔주면 된다. 📌느낀점 자꾸 대소문자 변환에서 익숙한 아스키코드를 사용하는것 같다. 코드의 길이는 어퍼케이스를 쓰는게 이득이므로 어퍼케이스를 쓸 수 있도록 의식적으로 연습해야겠다. //나의 코드 //강사님 코드

12.대문자로 통일

📌강의 정리 대문자는 그대로 두고 소문자를 찾으면 대문자로 바꿔준다. 우선 let x of s로 하나씩 찾는다 이때 if문을 사용한다. 소문자로 바꿔주는 것은 toLowerCase()이므로 문자 하나씩 소문자로 바꿔줘서 비교하는 조건문을 걸어준다. 이때 정답 문자열에 += 연산자를 써서 하나씩 넣어주면 된다. ascii코드로도 풀 수 있다. num값을 charCodeAt()으로 아스키로 넣어준후 97, 122로 비교하여 소문자 찾고 ascii값에서 32를 빼어 대문자로 바꿔주면 된다. 이제 이 숫자를 다시 문자로 바꿔줘야 한다. String.fromCharCode(num-32) 이다. 📌느낀점 11번 문제의 연장선상에 있는 문제이다. 대문자가 소문자로 바뀌는 코드가 toLowerCase()라는 것과 as..

11.대문자 찾기

📌강의 정리 대문자는 총 3개이다. 고전적인 방법은 toUpperCase()를 사용하는것이다. x.toUpperCase()하면 x자체를 바꾸는것이 아닌 x의 대문자 값을 출력한다. x값이 변하지는 않음 깊은 복사 x= x.toUpperCase() 하면 다 바뀐다. 아스키 코드 방법도 있다. let num = x.charCodeAt() 로 하면 num에 순서대로 x의 아스키코드가 저장된다. 이것도 원래 배열을 바꾸는 것이 아닌 바뀐값을 출력하는 것이므로 if문이용하여 하나씩 비교하면된다. 📌느낀점 구글링을 조금 했지만 문제 풀기전부터 아스키코드를 이용해야겠다는 생각은 했다. 어려운점은 크게 없다. 두가지만 기억해두자 문자를 아스키코드로 바꿔주는 x.charCodeAt() 문자를 대문자로 바꿔주는 x.toU..

10.문자 찾기

📌강의 정리 그냥 간단하게 let x of s 를 쓴다. if문써서 하나씩 판별하면 된다. 내장함수도 한번 써보자. s.split(t)를 하면 t가 R이었으므로 R을 구분자로 문자열을 나누어 배열로 반환한다. 그러므로 R의 개수 +1이 반환되니까 s.split(t).length 를 하면 answer -1을하면 답이 나온다. 📌느낀점 쉬운 문제였다. 생각한대로 바로 풀면되고 추가로 알려주신 split메서드를 나중에도 잘활용하면 좋을 것 같다. //나의 코드 //강사님 코드

9.A를 #으로

📌강의 정리 함수에서 s로 받는다. answer = ""; 로 하면 문자열이라고 선언 할 수 있다. for x of s 를 하고 if x==='A'를 해서 맞으면 answer+='#' 를 누적하고 아니라면 그냥 x값을 answer +=x; 를 통해 그냥 넘어가면 끝이다. 다른 방법도 있다. replace라는 함수를 쓰는 것이다. s=s.replace(/A/, '#')이면 모든 A가 #으로 바뀌지 않는다 /A/는 처음 만나는 A만 바뀌는거고 /A/g 를 해야 모든 값이 바뀌고 let answer=s;는 문자열이기에 얕은복사가 아니라 깊은 복사가 된다. 따라서 answer=answer.replace를 해서 직접 바꿔주어야 한다. 배열 또한 slice를 하면 깊은 복사를 할 수 있지만 그건 나중에 알아보자. ..

8.일곱난쟁이

📌강의 정리 가짜 난쟁이 두개를 제외시키고 출력하자 9개의 숫자중 2개의 숫자를 빼서 가짜인지 확인해보는 과정을 반복한다. 이중 for문이 돌아야한다. i와 j가 가짜인지 확인하자 9명의 총합을 sum이라고 구해놓고 arr[i]와 arr[j]값을 더한후 그값을 sum에서 빼면 그 값이 가짜난쟁이이다. splice를 쓰자. 얕은 복사를 해서 arr값을 복사해두자. 얕은복사는 answer = arr인데 arr값이 바뀌면 answer값도 바뀐다. let sum=arr.reduce((a,b)=>a+b,0); 를 써서 sum을 우선 다 더한값으로 넣는다. 이중 포문에서 처음에는 i=0 그 다음에는 j=i+1로 한다. i뒷편부터 구해야 하기 때문이다. 적절히 콘솔을 넣어서 부분적으로 계속 디버깅하자 console...

7.10부제

📌강의 정리 10부제 번호와 자동차의 끝 두자리가 나온다. 이번에도 for of 를쓴다. ===을 쓴다. 10으로 나누면 어떤 숫자든지 마지막 1의 자리가 나머지로 나온다. 📌느낀점 문제는 무난하게 풀었는데 우선 for of를 안써서 코드가 한줄이 더 늘어났고 ===을 안썼다.. ===은 안써도 되지만 그래도 익숙해지는것이 좋을 것 같다. //나의 코드 //강사님 코드

6.홀수

📌강의 정리 홀수들만 구하고 그 홀수들의 합을 출력한다. 먼저 arr배열을 넘긴다. 탐색해서 홀수를 넘겨야한다. for문에서 i가 아니라 of 구문을 써보자. for(let x of arr) 변수를 길게 의미있게 하지말고 배울때는 간단하게 하자. ex) tmp, a, x, result 면접관앞에서는 변수이름 잘 정해서 하자. arr의 값들을 하나씩 x가 받는다. 코딩인터뷰할때 ==과 ===중에서 하나로 통일해서 해야한다. ===은 타입까지 비교한다. min은 Number.MAX_SAFE_INTEGER로 초기화한다. 습관을 들여놓자. += 이라는 할당연산자를 써서 코드를 간결하게 짜자 answer.push를 써서 answer라는 배열에 sum과 min을 push한다. 이렇게해서 answer를 정의하면 된다..

반응형