📌강의정리
단어가 들어오면(소문자로 된) 중복제거하고 출력하는 문제이다.
indexOf라는 메소드를 사용할 것이다.
console.log(s.indexOf("k"));를 하면 0이뜬다.
indexOf는 문자열에서 제일 처음있는 문자의 인덱스를 출력한다.
indexOf('k', 1)을 하면 1번인덱스부터 찾아서 나오는 k의 인덱스를 반환한다.
이거 이용하면 특정문자찾기도 가능하다.
for of 쓰면 안되고 for(;;)써야 한다.
i를 변수로 콘솔을 다 찍으면서 indexOf의 흐름을 알아보자.
이제 if(s.indexOf(s[i])===i) 를 이용해서 처음발견된 위치와 본래의 위치가 같으면 answer 에 s[i]를 누적하면 된다.
특정문자의 개수를 찾는 것도 가능하다.
let pos=s.indexOf('k');
로 찾다가 while(pos≠-1)을 해서 -1이면 pos=s.indexOf('k',pos+1)을 하면
증감값으로 특정문자의 개수를 알 수 있다.
📌느낀점
알고리즘은 진짜 두뇌싸움이 강한것같다.
분명 알고있는기능인데 이 기능을 심플하게 이용해서 중복을 없앴다...
알고나면 항상 왜 그 생각을 못했을까 싶다.
어제도 이거랑 똑같은기능을 구현하는데 어마어마한 시간과 코드를 사용했다.
진짜 알고리즘은 신기하다.
잘 알아둬서 두번째에는 실수하지 않도록 최선을 다해보자.
//나의 코드, 오류
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer="";
for(let x of s){
if(answer.indexOf(x) != s.indexOf(x)) answer+=s[s.indexOf(x)]
}
return answer;
}
console.log(solution("kskeksqskkqset"));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer="";
//console.log(s.indexOf("K"));
for(let i=0; i<s.length; i++){
//console.log(s[i], i, s.indexOf(s[i]));
if(s.indexOf(s[i])===i) answer+=s[i];
}
return answer;
}
console.log(solution("ksekkset"));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 1. 기본문제 풀이' 카테고리의 다른 글
17.중복단어제거 (0) | 2022.01.12 |
---|---|
15.가운데 문자 출력(substring, substr) (0) | 2022.01.12 |
14.가장 긴 문자열 (0) | 2022.01.12 |
13.대소문자변환 (0) | 2022.01.12 |
12.대문자로 통일 (0) | 2022.01.12 |