교육을 들으면서도 꾸준히 블로그 작성을 하려했지만,,,
노션에만 정리해두고 글은 올리지 못한 나 ㅎ.ㅎ
역시 글을 꾸준히 쓰는건 너무 어렵다;<
요근래 취준하면서 계속해서 서류도 넣고,
인생 첫 면접도 보면서 새로운 경험을 많이 했는데
정작 제일 중요한 코딩 연습을 너무 안해버린 이슈...
그래서 서류를 붙어도 코테에 당연히 불합격할 수 밖에 없는 실력인...😢
넥토리얼도 그렇고.. 기업들 코테 어떻게 치는지 봤는데..
영어..로 코테를... 보는 곳도 꽤 있다니.. 난 영어 정말 못하는데...
그래서 더 위기감을 느껴서 영어 해석하는 연습도 해볼 겸 CodeSignal이나 LeetCode로 연습도 해보려고 한다!
(알고리즘도 공부를 해야..겠쬬.. 공부 열심히 안한 과거의 나 자신.. 정말 좋다^_^)
코딩하는 감을 잃지 않기 위해 이번에는 꼭 꾸준히 글도 쓰면서 연습하길 빌며... 아자잣
바로 CodeSignal의 다양한 학습 과정 중 Four-Week Coding Interview Prep in JavaScript 로 연습 시이작!~

[String Manipulation Basics]
1. 모음 위치(인덱스) 찾기
- 문자열 s를 입력 받아, 문자열을 순회하며 모음의 0부터 시작하는 위치를 배열에 저장하는 함수를 작성한다.
- JavaScript 내장 메서드 사용 금지.
- 예를 들어, console.log(findVowelPositions("Hello WORLD"))는 [1, 4, 7]을 출력해야 한다. 여기서 'e'는 모음이고, "Hello" 문자열에서 1번째 위치이다. 'o' 또한 모음이고, 4번째 위치이다. 마지막 모음은 7번째 위치의 'O'이다.
- 모음은 다음 문자 중 하나로 정의된다: ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'].
function findVowelPositions(s) {
const result = [];
const vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
// 문자열을 0-based 인덱스로 끝까지 순회
for(i=0; i<s.length; i++){
const char = s[i];
// 현재 문자가 모음 목록 중 하나인지 확인
for(j=0; j<vowels.length; j++){
if(char === vowels[j]){
result.push(i); // 모음이면 s에서의 위치(i) 저장
break; // 불필요한 비교를 줄이고 중복 데이터에 대비할 수 있음
}
}
}
return result;
}
module.exports = { findVowelPositions };
2. charCodeAt, fromCharCode 없이 알파벳 시프트하기
- 주어진 문자열에서 모든 문자를 알파벳 순서대로 오른쪽으로 한 칸씩 이동시킨 새로운 문자열을 반환한다.
- 마지막 문자 'z'와 'Z'는 각각 첫 번째 문자 'a'와 'A'로 바뀌어야 하며, 문자가 아닌 경우에는 그대로 유지해야 해야 한다.
- charCodeAt()이나 fromCharCode()와 같은 문자열 내장 메서드는 사용할 수 없다.
- 예를 들어, "abc123XYz!"라는 문자열이 주어지면, 함수는 "bcd123YZa!"를 반환해야 한다.
function solution(s) {
const lower = "abcdefghijklmnopqrstuvwxyz";
const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let result = "";
for(let i=0; i<s.length; i++){
const char = s[i];
// z,Z 예외 처리
if(char === "z"){
result += "a";
continue;
} else if(char ==="Z"){
result += "A"
continue;
}
// char가 소문자일 경우
let idx = -1; // lower나 upper에서 발견된 위치 저장하기 위한 변수
for (let j = 0; j < lower.length; j++) {
if (lower[j] === char) {
idx = j;
break;
}
}
if(idx !== -1){
result += lower[idx+1];
continue;
}
// char가 대문자일 경우
for (let j = 0; j < upper.length; j++) {
if (upper[j] === char) {
idx = j;
break;
}
}
if(idx !== -1){
result += upper[idx+1];
continue;
}
result += char;
}
return result;
}
module.exports = { solution };> break: 현재 루프 1개만 종료
> continue: 현재 반복을 끝내고 다음 반복으로!
> 난 왜 이런 개념도 헷갈리는 거지!!!!!!!! 후.. 왜겠어.. 열심히 공부 안한 탓이지..
3. toLowerCase, toUpperCase 없이 모든 소문자/대문자를 모든 대문자/소문자로 변환하기
- 주어진 문자열 inputString에서 모든 소문자를 대문자로, 모든 대문자를 소문자로 변환하는 함수를 작성한다.
- 문자가 아닌 경우에는 변환하지 않는다.
- 변환 과정에서 'toLowerCase()', 'toUpperCase()' 등의 JavaScript 내장 메서드를 사용하지 않는다.
- 예를 들어, 입력 문자열 "HelLo WoRld 123"의 출력은 "hELlO wOrLD 123"이어야 한다.
function solution(inputString) {
const lower = "abcdefghijklmnopqrstuvwxyz";
const upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
let result = "";
for(i=0; i<inputString.length; i++){
const char = inputString[i];
let idx = -1;
//소문자 -> 대문자
for(j=0; j<lower.length; j++){
if(char === lower[j]){
idx = j
break;
}
}
if(idx !== -1){
result += upper[idx];
continue;
}
//대문자 -> 소문자
for(j=0; j<upper.length; j++){
if(char === upper[j]){
idx = j
break;
}
}
if(idx !== -1){
result += lower[idx];
continue;
}
result += char;
}
return result;
}
module.exports = { solution };
영어로 된 코테부터 연습하려하니 안그래도 안굴러가는 머리가 더 안굴러가는 기분이다ㅠ-ㅠ
코테를 지금에서야 준비한다는게 정말 늦었다고 생각해서

바로 실전으로 가보려고 했지만...?
JS 개념들을 꼭 되짚어봐야겠다고 느꼈다ㅠ (알고리즘들도...)
기초 복습도 하면서 하루에 코테 2~3문제씩은 꼭 풀 수 있도록 해보자아ㅏ아아아아ㅏ
(어떤 방식으로 기초 복습할지 다들 어떤식으로 계속 공부하는지 또 찾아봐야겠뜨아)
