❓시간제한 1초라고 명시되어있지만 2056ms, 맞았습니다!
라고 표시되는 점에서 미묘하다
const fs = require('fs');
const input = fs.readFileSync("/dev/stdin").toString().trim()
const solution = input => {
let obj = {}
for(let i = 1; i<=input.length; i++){
for(let j = 0; j<=input.length-i; j++){
obj[input.slice(j, j+i)] = 0
}
}
return Object.keys(obj).length
}
console.log(solution(input))
입력된 문자열을 규칙적으로 1글자씩, 2글자씩, ... , n글자씩 slice()하여 객체의 키로 넣고 Object.keys() 로 키만 뽑아 그 배열의 길이를 반환한다.
규칙이 한눈에 안 보일때는 이렇게 하나씩 나열해가며 규칙을 찾곤한다.
const input = 'ababc'
let obj = {}
for(let i = 0; i+1<=input.length; i++){
obj[input.slice(i,i+1)] = 0
}
for(let i = 0; i+2<=input.length; i++){
obj[input.slice(i,i+2)] = 0
}
for(let i = 0; i+3<=input.length; i++){
obj[input.slice(i,i+3)] = 0
}
for(let i = 0; i+4<=input.length; i++){
obj[input.slice(i,i+4)] = 0
}
for(let i = 0; i+5<=input.length; i++){
obj[input.slice(i,i+5)] = 0
}
👉
for(let i = 1; i<=input.length; i++){
for(let j = 0; j<=input.length-i; j++){
obj[input.slice(j, j+i)] = 0
}
}
const input = 'ababc'
const solution = input => {
let result = [];
for (let i = 1; i <= input.length; i++) {
for (let j = 0; j <= input.length - i; j++) {
result.push( input.slice(j, j + i) );
}
}
return new Set(result).size;
}
result = [ 'a', 'b', 'a', 'b', 'c', 'ab', 'ba', 'ab', 'bc', 'aba', 'bab', 'abc', 'abab', 'babc', 'ababc' ]
로 중복된 값이 포함되어 있지만
new Set()
을 사용하면 배열 안의 중복되는 데이터를 제거할 수 있다
- 생성자 : Set()
- 속성 : size
- 메소드 : add(value), clear(), delete(value), has(value)