문제 66 : 블럭탑 쌓기
문제 66 : 블럭탑 쌓기
// 탑을 순서에 맞게 쌓아야 합니다
// 정해진 순서가 BAC라면 A 다음 C가 쌓아져야 합니다.
// B를 쌓지 않아도 A와 C를 쌓을 수 있습니다.
// B 다음 블럭이 C가 될 수 있습니다.
// 입력
// 탑 = ["ABCDEF", "BCAD", "ADEFQRX", "BEDFG", "EFGHZ"]
// 규칙 = "ABD"
// 출력
// ["가능", "불가능", "가능", "가능", "가능"]
자바스크립트의 indexOf
indexOf 메서드는 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다.
그리고 일치하는 값이 없으면 -1을 반환합니다.
str.indexOf(searchValue[, fromIndex])
두개의 매개변수가 주어질 수 있습니다.
searchValue는 찾으려는 문자열이고, fromIndex는 찾기 시작하는 위치를 나타내는 인덱스값입니다.
두번째 매개변수를 통해서 꼭 첫번째 값이 아니라더라고 찾을수가 있습니다.
const str = "ABCDEAA";
str.indexOf("A"); //0
위의 코드는 맨 첫번째 A를 찾습니다. 그래서 그 인덱스인 0을 반환합니다.
const str = "ABCDEAA";
let temp = -1;
for (let i = 0; i < 3; i++) {
temp = str.indexOf("A", temp + 1);
}
console.log(temp);
위의 코드는 3번째로 등장하는 A의 인덱스를 찾습니다. 이처럼 두번째 매개변수인 fromIndex를 통해서 꼭 첫 번째 값이 아니더라도 찾을 수 있습니다.
풀이 1
// 규칙: "ACE", 배열: ["ABCDE"]
// 규칙의 길이만큼 루프를 돌린다.
// 배열값에서 규칙의 [0]을 찾는다. 있다? 없다?
// 없으면 배열값에서 규칙의 [1]을 찾는다, 있다? 없다?
function checkRule(rule, arr) {
let temp = -1;
for (let i = 0; i < rule.length; i++) {
if (arr.indexOf(rule[i]) !== -1) {
// 존재한다면
// 넣기 전에 temp값과 index 값 비교
let index = arr.indexOf(rule[i]);
if (temp < index) {
temp = index;
} else {
return "불가능";
}
}
}
return "가능";
}
function s(rule, arr) {
let answer = [];
for (let i of arr) {
answer.push(checkRule(rule, i));
}
return answer;
}
const block = ["ABCDEF", "BCAD", "ADEFQRX", "BEDFG", "AEBFDGCH"];
const rule = "ABCD";
console.log(s(rule, block));
// ["가능", "불가능", "가능", "가능", "불가능"]
Leave a comment