728x90
📌 문제
📌 입력
📌 출력
📌 예제 입출력
📌 풀이
알아야 하는 것
- Set
- slice
- indexOf
구할 것
- 부분 문자열 구하기
- 0부터 i까지, i부터 j까지, j부터 끝까지 총 3가지 부분으로 slice를 사용해 나눈다.
- i의 범위는 1부터 시작하고, j의 범위는 i+1로 시작한다.
- 그래야 abcd의 경우 a, b, cd가 나오게 되고, 이후에 a, bc, d 이런 식으로 나온다. (이중 for)
- 부분 문자열의 중복을 제거하고 사전 순으로 정렬하기
- 부분 문자열 그 자체를 넣을 배열 result와 별개로 중복을 제거할 Set을 만들어둔다.
- 이 Set에 위에서 자른 3가지 부분을 각각 add해서 더해준다.
- Set으로는 정렬할 수가 없기 때문에 전개 구문이나 Array.from 같은 메서드로 배열화 시킨다.
- 이후 sort로 사전순 정렬을 진행한다. 이것을 sortedSet 배열이라고 선언했다.
- 값 찾기
- result라는 배열에는 3가지 부분으로 잘랐을 때가 모두 들어 있다.
- 이 때를 구조 분해 할당으로 가져오되, sortedSet의 index로 조각을 찾아준다.
- 즉 sortedSet에는 이 조각이 몇 번째 인덱스에 있는지 찾는 것이다.
- 왜냐하면 result에는 잘랐을 때 연결된 조각, 예컨대 a, b, cd가 들어 있는데 이게 sortedSet에서는 몇 번째 인덱스에 있는지 알아야 점수를 합산할 수 있기 때문이다.
- indexOf로 인덱스를 찾되 0부터 시작하기 때문에 각각 1씩 더해줘야 한다. 따라서 그냥 3을 같이 더해준다.
- 이렇게 합한 값을 score라고 할 때, 0인 answer와 비교해 계속 최대값을 갱신해준다.
const readline = require('readline');
let rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on('line', (line) => {
input.push(line)
if (input.length === 2) {
rl.close();
}
});
rl.on('close', () => {
let num = Number(input[0]);
let str = input[1];
let result = [];
let answer = 0;
let set = new Set();
for (let i = 1; i < num-1; i++) {
for (let j = i+1; j < num; j++) {
result.push([str.slice(0, i), str.slice(i, j), str.slice(j)]);
set.add(str.slice(0, i));
set.add(str.slice(i, j));
set.add(str.slice(j))
}
}
let sortedSet = Array.from(set).sort();
for (let [one, two, three] of result) {
let score = sortedSet.indexOf(one) + sortedSet.indexOf(two) + sortedSet.indexOf(three)+3
answer = Math.max(answer, score)
}
console.log(answer)
})
처음에 Set을 사용한 부분까진 좋았는데 뒤에 indexOf로 인덱스 위치를 찾는 부분을 많이 헤맸다.
무려 3중 for문까지 썼던 탓에 시간초과가 나서 한참 애를 먹어 챗봇의 도움을 받아 풀었다 ㅠㅠ
부분 문자열을 구하는 부분이나 Set을 쓰는 부분은 매우 유용한 것 같으니 숙지해야겠다.
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 구름톤 챌린지 2주차 코딩테스트 : 통증 (0) | 2023.08.23 |
---|---|
[JavaScript] 구름톤 챌린지 2주차 코딩테스트 : 구름 찾기 깃발 (0) | 2023.08.22 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 이진수 정렬 (0) | 2023.08.21 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 완벽한 햄버거 만들기 (0) | 2023.08.21 |
[JavaScript] 구름톤 챌린지 1주차 코딩테스트 : 합 계산기 (0) | 2023.08.17 |