Programmers

Programmers 문제 풀이 30

백단비 2023. 6. 28. 15:28

문제 설명 : k의 개수

1부터 13까지의 수에서, 1은 1, 10, 11, 12, 13 이렇게 총 6번 등장한다.

정수 i, j, k가 매개변수로 주어질 때,

i부터 j까지 k가 몇 번 등장하는지 return 하는 solution 함수는????

 

제한사항

  • 1 ≤ i < j ≤ 100,000
  • 0 ≤ k ≤ 9

 

입출력예

 

i j k result
1 13 1 6
10 50 5 5
3 10 2 0

 

문제 풀이

 

i부터 j까지 문자열로 만들고 그걸 split으로 각 문자를 배열로 만들어 준다음 filter를 사용해서 k와같은 숫자들만 구해서 길이를 구했다.

v*1은 문자인 str의 원소를 숫자로 바꿔서 k와 같은지를 확인할 수 있게 만든 것이다.

function solution(i, j, k) {
    let str = ""    
    for(let n = i ; n <= j; n++) {
        str = str+ n
    }
    return str.split('').filter((v) => v*1 === k).length
}

이렇게 풀면 시간이 오래 걸려서 조금 찝찝했는데

split('').filter((v) => v*1 === k ).length대신

 split(k).length -1을 넣어주면 시간이 반으로 준다

( => -1을 해주는 것은 split(k)로 분리했을 때 k의 개수보다 1개가 더 많게 나오기 때문에 빼주는 것이다.)

이렇게 푸는 건 split의 여집합을 이용해서 푼다고들 한다.

 

 


 

 

문제 설명 : A로 B 만들기

문자열 before와 after가 매개변수로 주어질 때,

before의 순서를 바꾸어 after를 만들 수 있으면 1을,

만들 수 없으면 0을 return 하는 solution함수는??

 

제한사항

  • 0 < before의 길이 == after의 길이 < 1,000
  • before와 after는 모두 소문자로 이루어져 있다.

 

입출력예

 

before after result
"olleh" "hello" 1
"allpe" "apple" 0

 

문제 풀이

 

접근 1) before안의 원소가 after에 포함되어 있으면 after의 원소를 빈문자로 바꾸고 

다 바꾼 후에 after의 길이가 0이면 before로 after를 만들 수 있으니까 1을 반환 아니면 0을 반환하는 함수를 만듦

function solution(before, after) {
    var answer = 0;
    let str = after
    for(let i of before) {
        if(str.includes(i)){
           str = str.replace(i,'')         
        }    
    }
    str.length === 0 ? answer = 1 : answer = 0
    return answer;
}

 

접근 2) 그냥 둘 다 sort로 정렬해서 맞춰보면 되지 않을까 생각 같으면 1을 다르면 0을 반환하는 함수 만듦

function solution(before, after) {
    return before.split('').sort().join('') === after.split('').sort().join('') ? 1 : 0
}

 

 


 

 

문제 설명 : 이진수 더하기

이진수를 의미하는 두 개의 문자열 bin1과 bin2가 매개변수로 주어질 때,

두 이진수의 합을 return 하는 solution함수???

 

제한사항

  • return 값은 이진수를 의미하는 문자열입니다.
  • 1 ≤ bin1, bin2의 길이 ≤ 10
  • bin1과 bin2는 0과 1로만 이루어져 있습니다.
  • bin1과 bin2는 "0"을 제외하고 0으로 시작하지 않습니다.

 

입출력예

 

bin1 bin2 result
"10" "11" "101"
"1001" "1111" "11000"

 

문제 풀이

 

parseInt()와 toString()을 사용해서 풀었다.

parseInt()는 다른 진수를 10진수로 변환해 주고

toString()은 문자열로 만들어 주는 것도 있지만 괄호 안에 숫자의 진수로? 바꿔준다.

function solution(bin1, bin2) {
	return ( parseInt(bin1,2) + parseInt(bin2,2)).toString(2)
}

 

 

 

https://programmers.co.kr 

 

프로그래머스

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

programmers.co.kr

 

320x100

'Programmers' 카테고리의 다른 글

Programmers 문제 풀이 32  (0) 2023.07.28
Programmers 문제 풀이 31  (0) 2023.07.27
Programmers 문제 풀이 29  (0) 2023.06.27
Programmers 문제 풀이 28  (0) 2023.06.24
Programmers 문제 풀이 27  (0) 2023.06.23