본문 바로가기
알고리즘/프로그래머스 문제-JS

[JS] 겹치는 선분의 길이

by sweesweet 2022. 11. 1.

https://school.programmers.co.kr/learn/courses/30/lessons/120876#

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이거... 0단계푸는데 장장 4시간을....썼다... 내가 이력서 쓴다고 남겨둔 소중한 시간인데ㅠㅠㅠ

처음엔 객체로 풀었는데 테스트 케이스는 통과인데 제출시 다른 부분이 틀렸었다...그래서 반례를 계속 생각하면서 풀어도 2문제가 죽어도 통과가 되지 않길래, 3시간동안 끙끙대던걸 다르게 풀어보자 하고 배열로 풀게 되었다.

 

객체는 해당 key가 존재한다면 0으로 만들어 그 길이를 재고자 했는데 실패..!

function solution(lines) {
    let min= Math.min(...lines.flat())// 가장작은값
    let max= Math.max(...lines.flat())// 가장큰값
    let arr=Array(max-min).fill(2)// 가장큰값, 가장작은값 기준으로 array만들기
   let start=0-min// 제일 작은 값을 기준으로 두고싶어서 이렇게 설정..!
   for(let i=start+lines[0][0];i<start+lines[0][1];i++){
      arr[i]=1
   }
    for(let i=start+lines[1][0]; i<start+lines[1][1];i++){
        if(arr[i]===1){
            arr[i]=0
        }else if(arr[i]===2){
            arr[i]=1
        }
    }
        for(let i=start+lines[2][0]; i<start+lines[2][1];i++){
        if(arr[i]===1){
            arr[i]=0
        }else if(arr[i]===2){
            arr[i]=1
        }
    }
   return arr.filter(el=>el===0).length
}

시간 복잡도를 좀 생각하고 싶어서 3개의 for문으로 나눴다.. 이중포문으로 그냥 돌려버릴걸 어차피 수도 적은데^^...

레포지토리에도 자동으로 올라가긴 했는데...진짜 개고생하고 풀어서 그런가, 블로그에서도 올리고싶었다...(지금은 객체로 푼게 올라가버렸따..!)

객체로 다시 풀어봄!

function solution(lines) {
    let min= Math.min(...lines.flat())
    let max= Math.max(...lines.flat())
   let start=0-min
       let line={}
   for(let i=start+lines[0][0];i<start+lines[0][1];i++){
       line[i]=1
   }
    aa(start+lines[1][0],start+lines[1][1],line)
 
    aa(start+lines[2][0],start+lines[2][1],line)  
    return Object.values(line).filter(el=>el===0).length

}
function aa(a,b,line){
    for(let i=a;i<b;i++){
       
       if(line[i]===undefined){
           line[i]=1 
       }else{
           line[i]=0
       }
       
   }
}

별차이가없는듯 하다

'알고리즘 > 프로그래머스 문제-JS' 카테고리의 다른 글

[JS]카드 뭉치  (0) 2023.03.28
[JS]주차 요금 계산  (0) 2022.12.21
[JS]키패드 누르기  (0) 2022.07.12
[JS]부족한 금액  (0) 2022.07.06
[JS]최소직사각형  (0) 2022.07.06