본문 바로가기
Record/TIL

TIL 20230406 알고리즘 문제풀이

by junhub 2023. 4. 7.

function solution(num, k) {
    let num1 = String(num)
    let k1 = String(k)
    
    let answer = num1.indexOf(k1,0) + 1
    if(num1.indexOf(k1,0) === -1){
        return -1
    }
    return answer;
}

console.log(solution(29183,1))
console.log(solution(232443,4))
console.log(solution(123456,7))

정수 num에 k가 해당하는 자리 수를 리턴하는 함수이다. 이때 주의해야 할 점은 index 위치와 달리 1,2,3 순서로 카운트된다. 

따라서 indexOf 함수를 사용했는데 indexOf() 함수는 문자열 내에서 특정 문자열이 처음으로 등장하는 인덱스를 반환하는 메서드이다. 

 

string.indexOf(searchValue, startIndex)

indexOf 는 위와 같은 구문을 가지고 있는데 searchValues는 찾으려는 문자열이고, startIndex는 선택적 매개변수로, searchValue를 검색하기 시작할 인덱스를 나타낸다. 

 

인덱스 위치로 나오는 것이 아닌 자리 수가 1,2,3으로 카운트 되므로 num1.indexOf(k1,0) + 1 을 answer에 할당해서 리턴하게 했고, 

 

num1.indexOf(k1,0) === -1

 

만약 위와 같다면 즉, num 안에 k가 없다면 -1이 나오므로 위와 같은 조건이면 -1을 리턴하게 했다. 

 

 

 

# 다른 풀이

function solution(num, k) {
    let ind = (''+num).indexOf(k);
    return ind === -1 ? -1 : ind+1;
}

function solution(babbling) {
    let answer = 0;
      for (let word of babbling) {
      if (/^(aya|ye|woo|ma)+$/g.test(word)) {
        answer++;
      }
    }
    return answer;
  }
  
  console.log(solution(["aya", "yee", "u", "maa", "wyeoo"]))
  console.log(solution(["ayaye", "uuuma", "ye", "yemawoo", "ayaa"]))

정규 표현식을 사용해 풀었다. 

^ = 문자열의 시작

$ = 문자열의 끝 

/ = 정규 표현식의 시작과 끝을 감싼다

+ = 앞에 나온 패턴이 한 번 이상 연속해서 나오는 것을 의미하는 문자

g = 전역을 검사 

 

aya, ye, woo, ma가 포함되어 있거나, ayaye, yemawoo와 같이 조합하여 만들어질 수 있는 문자의 개수를 구했다. 

 

https://curryyou.tistory.com/234

 

[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코

# 정규표현식이란?(Regular Expression: Regex) 정규표현식은 "특정 패턴의 문자열"을 찾기 위한 표현 방식입니다. (이런걸 형식 언어, formal languange라고 합니다.) 정규표현식을 이용하면, 특정 패턴에 매

curryyou.tistory.com

정규 표현식에 대한 자세한 내용이 담겨있는 블로그이다. 


function solution(M, N) {
    if(M === 1 && N === 1){
        return 0
    }else{
        return M * N - 1
    }
}

어려워보이는 문제이나 입출력 예를 보고 힌트를 얻어서 해결했다. 가로 * 세로 - 1을 해주면 가위질 횟수가 나오게된다. 


function solution(cipher, code) {
    var cipherA = Array.from(cipher)
    let result = []
    for(i=1; i <= cipherA.length; i++){
        if(i%code === 0){
            result.push(cipherA[i - 1])
        }
    }
    return result.join('')
}

매개변수로 들어오는 code의 배수에 해당하는 자리수의 글자만 따오면 암호 해독이 된다. 

먼저 문자열로 들어오는 매개변수 cipher를 배열로 만들어주었고, for 반복문을 사용했다. i의 초기값을 1로 세팅해주어 0번째 인덱스를 제외시켰고, 만약 i를 4로 나누었을때(매개변수 code에 4가 들어왔을 때를 가정) 나머지가 0 이라면 빈 배열이 할당되어있는 변수 result에 push 메소드를 사용해 chiperA[i-1] 를 밀어넣어 주게 했다. 이때 i-1을 한 이유는 인덱스 기준(0부터 순서 카운트)가 아닌 1부터 자리수를 세기때문에 해줬다. 마지막으로 join 메소드를 사용해 배열상태인 result를 문자열로 만들어 리턴했다. 

 

 

function solution(cipher, code) {
  var answer = "";
  for (let i = code - 1; i < cipher.length; i += code) {
    answer += cipher[i];
  }
  return answer;
}

i의 초기값을 code -1 즉, 만약 code에 4가 들어왔고 4번째 자리수를 가져오고 싶다면 인덱스로서는 3번째 인덱스를 가져와야한다. 따라서 code의 -1 값을 초기값으로 세팅해줬고, i가 code만큼 증가하게함으로서 배수만큼 증가하게 한 것이다. 


 

'Record > TIL' 카테고리의 다른 글

TIL 20230408 알고리즘 문제 풀이  (0) 2023.04.10
TIL 20230407 알고리즘 문제풀이  (0) 2023.04.10
TIL 20230318(온보딩 11일차)  (0) 2023.03.18
TIL 20230317(온보딩 10일차)  (0) 2023.03.17
TIL 20230315(온보딩 8일차)  (0) 2023.03.16

댓글