Given a string s consisting of words and spaces, return the length of the last word in the string.
A word is a maximal substring consisting of non-space characters only.
띄어쓰기와 문자로 구성되어 있는 문자열이 주어졌을 때, 맨 마지막 단어의 길이를 반환하는 함수를 구현해주세요.
function lengthOfLastWord(s: string): number {
const sArr = s.split(" ");
for(let i = sArr.length-1 ; i >= 0 ; i--){
if(sArr[i]) return sArr[i].length
}
};
//다른 풀이 법
function lengthOfLastWord(s: string): number {
const sArr = s.trim().split(" ");
return sArr[sArr.length-1].length
};
NULL
Given an integer n, return a list of all simplified fractions between 0 and 1 (exclusive) such that the denominator is less-than-or-equal-to n. You can return the answer in any order.
정수 n이 주어졌을 때, 분모가 n보다 작으면서 분수의 크기가 0보다 크고 1보다 작은 기약분수를 문자열 형태로 배열에 담아 반환해주세요.
function simplifiedFractions(n: number): string[] {
const answer : string[] = [];
for (let i = 2 ; i <= n ; i++){
for (let j = 1 ; j < i ; j ++){
let gcf = findGCF(i,j);
let denom = Math.trunc(i/gcf)
let num = Math.trunc(j/gcf);
let simplifiedFrac = `${num}/${denom}`
answer.includes(simplifiedFrac) ? null : answer.push(simplifiedFrac)
}
}
return answer
};
function findGCF(num1 : number, num2 : number) : number {
let smallerNum = Math.min(num1, num2);
let GCF = 1;
for (let i = 2; i <= smallerNum; i++) {
if (num1 % i === 0 && num2 % i === 0) {
GCF = i;
}
}
return GCF;
}
이번에는 유클리드의 호제법을 사용하지 않고 최대공약수를 찾은 다음 만들어둔 빈 배열 안에 기약분수를 추가로 넣어주는 방식으로 문제를 풀었다.
Set을 이용한 방식도 생각했지만 수학적으로 접근을 하고 싶었기에 최대공약수만을 사용해 접근해서 풀었다.
You are given a string s consisting of n characters which are either 'X' or 'O'.
A move is defined as selecting three consecutive characters of s and converting them to 'O'. Note that if a move is applied to the character 'O', it will stay the same.
Return the minimum number of moves required so that all the characters of s are converted to 'O'.
'X'와 'O'로만 n개의 문자로 이루어진 문자열 s가 주어졌을 때, 연속된 3개의 문자를 'X' 에서 'O'로 바꾸는 것을 한 번의 '이동'이라고 보았을 때 문자열 s 안에 'X'가 없을 때 까지 총 몇 번 '이동' 해야 하는 지 반환하는 함수를 구현해주세요.
function minimumMoves(s: string): number {
let answer = 0;
let i = 0;
while (i < s.length){
if(s[i] === 'X'){
answer++
i += 3
} else {
i++
}
}
return answer
};
처음에는 's'를 split하여 순환하면서 연속된 자리를 'X'에서 'O'로 바꿔주는 방식으로 문제를 푸려고 했으나 너무 평이해보이길래 접근 방식을 인덱스로만 생각했다. 어차피 특정 자리가 'X'이고 그 후에 첫번째와 두번째 모두 'O'로 변경되는 것이기 때문에 건너띄어도 될 것이라고 생각해서 그런 방식으로 접근하기로 하였다.
You are given a positive integer num consisting only of digits 6 and 9.
Return the maximum number you can get by changing at most one digit (6 becomes 9, and 9 becomes 6).
6과 9로만 이루어진 숫자가 주어졌을 때, 하나의 자릿수만 변경해서 만들 수 있는 숫자들 중 최댓값을 반환해주세요.
function maximum69Number (num: number): number {
const numStr = num.toString();
const numDigits = numStr.length
if (!numStr.includes('6')){
return num
}
for (let i = 0 ; i < numDigits ; i++){
if(numStr[i] === '6'){
return (num + 3*(Math.pow(10,(numDigits-(i+1)))))
}
}
};
정말 단순하게 생각해서 몇 자리수의 상관없이 9가 가장 크기 때문에 앞에서부터 순환하면서 6을 찾으면 그것을 바로 9로 바꾸고 반환하는 방식으로 문제를 접근하였다.