문제
프로그래머스 2018 KAKAO BLIND RECRUITMENT [1차] 뉴스 클러스터링
https://programmers.co.kr/learn/courses/30/lessons/17677
언어
자바스크립트(JavaScript)
접근 방법
- 두 문자열 모두 두 글자씩 잘랐을 때 영문자 쌍이 아니면 버리고 영문자 쌍이라면 소문자로 바꾸어 새로운 배열에 넣는다. 새로운 배열을 arr1, arr2이라고 한다.
- 합집합은 arr1 배열에서 시작한다. 그리고 존재하는지 확인한 내용을 남기기 위해 checkArr을 정의한다.
- arr2 배열의 요소가 arr1에 존재하지 않으면 합집합에 그 요소를 저장한다.
- arr2 배열의 요소가 arr1에 존재할 때, 존재하는지 체크한 적이 있으면 다음 요소로 넘어간다. 다 넘어가면 합집합에 그 요소를 저장한다.
- arr2 배열의 요소가 arr1에 존재할 때, 존재하는 지 체크한 적이 없으면 합집합에 요소를 넣지 않고 교집합에 그 요소를 저장한다. 그리고 checkArr에 그 요소를 체크한 적이 있다고 표시한다.
코드
function solution(str1, str2) {
let answer = 0;
let arr1 = [];
let arr2 = [];
// 두 글자씩 끊었을 때 영문자 쌍이 아니면 버리고
// 영문자 쌍이라면 소문자로 바꾸어 리스트에 넣는다
for (let i=0; i<str1.length-1; i++){
let reg = /^[a-zA-Z]+$/;
if(reg.test(str1[i]) && reg.test(str1[i+1])){
let str = str1[i]+str1[i+1];
arr1.push(str.toLowerCase());
}
}
for (let i=0; i<str2.length-1; i++){
let reg = /^[a-zA-Z]+$/;
if(reg.test(str2[i]) && reg.test(str2[i+1])){
let str = str2[i]+str2[i+1];
arr2.push(str.toLowerCase());
}
}
if (arr1.length ===0 && arr2.length === 0){
return 65536;
}
// 합집합은 arr1에서 시작
// arr2의 요소가 arr1에 존재하지 않으면 합집합에 그 요소를 넣는다
// arr2의 요소가 arr1에 존재할 때, 존재하는지 체크한적이 있으면 넘어간다. 다 넘어가면 합집합에 요소를 넣는다.
// arr2의 요소가 arr1에 존재할 때, 존재하는지 체크한적이 없으면 합집합에 요소를 넣지 않고 교집합에 넣는다.
let unionArr = Object.assign([],arr1);
let interArr = [];
let checkArr = [];
for (let i=0; i<arr2.length; i++){
let isNew = true;
let idx = 0;
for (let j=0; j<unionArr.length; j++){
if ((arr2[i] === unionArr[j]) && (checkArr[j] !== true && j<arr1.length)){
isNew = false;
idx = j;
break;
}
}
if (isNew){
unionArr.push(arr2[i]);
}else{
checkArr[idx] = true;
interArr.push(arr2[i])
}
}
console.log(arr1,arr2,unionArr,interArr);
answer = Math.floor(interArr.length/unionArr.length*65536);
return answer;
}
복기
- 합집합과 교집합 찾는 코드를 짜기가 어려웠다. 요령이 있다기보다는 문제 풀이 실력이 좋아야하는 문제이다.
'개발 공부 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] [1차] 캐시 (0) | 2020.06.09 |
---|---|
[프로그래머스] [1차] 프렌즈4블록 (0) | 2020.06.09 |
[프로그래머스] 튜플 (JavaScript) (0) | 2020.06.07 |
[프로그래머스] [3차] 압축 (JavaScript) (0) | 2020.06.07 |
[프로그래머스] 괄호 변환 (JavaScript) (0) | 2020.06.06 |