메가바이트 6주차 (1/18) Coding Test, 자료구조,알고리즘

정영찬·2023년 1월 18일
0
post-thumbnail

TIL

19일차 코딩테스트 풀이 완료

  • 특이한 정렬
  • 등수 매기기
  • 옹알이
  • 로그인 성공

로그인 성공... 왜 안돼지?

function solution(id_pw, db) {
   const id = id_pw[0]
   const pw = id_pw[1]
   
   // const idRegex = new RegExp(id,"g")
   // const pwRegex = new RegExp(pw,"g")
   // console.log(idRegex.test("meosseugi"))  
 const result =  db.map((e,idx) => {
   // return  idRegex.test(e[0]) ? (pwRegex.test(e[1]) ? "login" : "wrong pw") : "fail" 
  
   
   const testId = e[0];
   const testPw = e[1];
   const idRegex = new RegExp(testId,"g")
   const pwRegex = new RegExp(testPw,"g")
   
   if( e[0] === "" || e[1] === "") {
     return "fail"
   }
    else if (idRegex.test(id) === true)  {
     return pwRegex.test(pw) === true ?  "login" : "wrong pw"
   }
   else if(idRegex.test(id) === false ){
     return "fail"
   }
   
  })
 

 console.log(result)
 if (result.indexOf("login") >= 0){
    return "login"
 }
 else if(result.indexOf("login") < 0 ) {
   return result.indexOf("wrong pw") >= 0 ? "wrong pw" : "fail"
 }
  
   
   
}

map 메소드를 간단하게 작성하면 풀수 있다는건 알수 있지만, 정규 표현식을 사용해서 문제를 해결해보고 싶어서 위와 같이 작성했는데, 첫번째 테스트 케이스에서 실패가 되어버린다. map 메서드는 도중에 멈출수 없다는 특징을 알고 있었기 때문에 result 배열을 구한다음에 "login" 값이 존재하는 메서드가 있다면 "login"을 리턴하고 없는 경우에 "wrong pw"가 존재하는 인덱스가 있다면 "wrong pw"를 아니면 "fail"을 리턴하게 설정했지만 그래도 실패하고 말았다.

그래서 그냥 도중에 멈출수 있는 for of 문을 사용해서 구현했더니 나를 비웃기라도 하는듯이 단번에 성공했다.

function solution(id_pw, db) {
  let result = ''
 for (const element of db){
   if(id_pw[0] === element[0] && id_pw[1] === element[1]){
     result = "login"
     break;
   }
   else if(id_pw[0] === element[0] && id_pw[1] !== element[1]){
     result ="wrong pw"
     break;
   }
   else {
     result="fail"
   }
 }
  
  return result 
}

다른 방식으로 접근하면서 해결해보고 싶었는데, 생각처럼 잘 되지 않아서 정말 답답했다..
그냥 하던대로 하는게 맞는건가..

자료구조

데이터가 저장되는 방법과 규칙

두가지 컵 중에서 물을 마실때 어떤 것을 선택하는지는 본인이 선택하기 나름이다. 자료구조도 하나의 물을 먹기위한 도구로, 물론 두개 다 물을 마실수는 있지만, 어떤 것이 더 효율적인지를 따진다면 답은 나오게 될것이다.

이런 방식으로 자료구조란 우리가 프로그램을 효율적으로 만들기 위한 데이터 저장소이다.

시간 복잡도, 공간 복잡도

우리가 데이터를 저장하는데 무엇이 더 효육적인지 결정하는데는 기준이 필요하다.
그 기준이 바로 시간 복잡도와 공간 복잡도이다.

시간 복잡도

알고리즘을 수행하는데 걸리는 시간(단계)

공간 복잡도

알고리즘을 수행하는데 필요한 메모리 양

좋은 공간 복잡도란?

  • 데이터를 저장 공간에 담을 때 , 적당한 크기의 저장 공간을 설정하는 것

    빅오 표기법

    공간/시간 복잡도를 표기하는 방법을 점근 표기법이라고 하고 그중 하나가 바로 Big-O표기법이다.

    빅오 표기법: 최악의 실행시간을 표기
    오메가 표기법 : 최상의 실행시간을 표기
    세타 표기법 : 평균 실행시간을 표기

추상 자료형

자료들과 그 자료들에 대한 연산들을 명시한 것

특징

  • 캡슐화 : 정보 은닉이 가능
  • 다형성 : 내부 구현을 사용자에게 맡김으로서 사용의 유연함을 제공한다.
  • 구현방법 명시 X : 자료구조와 다르게 구현방법을 명시하지 않고 있음

배열

같은 타입의 변수들로 이루어진 유한 집합

배열의 장단점

  • 장점
    - 읽기/쓰기(참조)에 좋다.
  • 단점
    - 추가/제거(수정)에 안좋다.

배열의 특징

  • 크기는 선언할때 고정적이다.
  • 주소는 연속적이다.

요약

  • 주소가 연속적이고 크기가 고정적이다.

크기가 고정되어있고 추가를 많이 할 필요가 없는 데이터 관리에 좋다.

profile
개발자 꿈나무

0개의 댓글