코딩테스트 28일차
크기가 작은 부분문자열
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
function solution(t, p) {
var answer = 0;
var len = p.length;
for (var i = 0; i <= t.length - len; i++) {
var substr = t.substring(i, i + len);
if (parseInt(substr) <= parseInt(p)) {
answer++;
}
}
return answer;
}
✏️풀이
먼저, solution 함수는 문자열 t와 문자열 p를 매개변수로 받습니다. 이 함수는 t에서 길이가 p와 같은 부분문자열 중에서 p가 나타내는 수보다 작거나 같은 수가 나오는 횟수를 반환하는 역할을 합니다.
코드의 첫 번째 줄에서는 answer라는 변수를 0으로 초기화합니다. 이 변수는 p가 나타내는 수보다 작거나 같은 수가 나오는 횟수를 저장할 변수입니다.
다음으로, len이라는 변수에 p의 길이를 저장합니다. 이렇게 함으로써 추후에 p와 길이가 같은 부분문자열을 추출할 때 사용됩니다.
그 다음은 반복문입니다. for 문을 사용하여 i 변수를 0부터 t의 길이에서 p의 길이를 뺀 값까지 1씩 증가시킵니다. 이렇게 함으로써 모든 가능한 부분문자열을 순회할 수 있습니다.
안쪽에 있는 substring() 함수는 t 문자열에서 길이가 p와 같은 부분문자열을 추출하는 역할을 합니다. substring(i, i + len)은 t에서 인덱스 i부터 길이 len만큼의 부분문자열을 추출합니다.
다음으로, parseInt() 함수를 사용하여 추출한 부분문자열과 p를 정수로 변환합니다. parseInt() 함수는 문자열을 정수로 변환하는 내장 함수입니다.
그 후, 변환한 정수를 비교하여 부분문자열이 p보다 작거나 같은지 확인합니다. 작거나 같으면 answer 변수를 1 증가시킵니다. 이렇게 함으로써 p가 나타내는 수보다 작거나 같은 부분문자열을 찾아 개수를 세게 됩니다.
마지막으로, answer 변수를 반환하여 결과를 출력합니다.
문자열 나누기
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
function solution(s) {
var answer = 0;
while (s.length > 0) {
var x = s[0]; // 첫 글자를 x로 설정
var countX = 1; // x의 개수를 카운트
var countOther = 0; // x가 아닌 다른 글자의 개수를 카운트
for (var i = 1; i < s.length; i++) {
if (s[i] === x) {
countX++;
} else {
countOther++;
}
if (countX === countOther) {
answer++;
s = s.slice(i + 1); // 현재까지 읽은 부분을 분리하고 남은 부분으로 설정
break;
}
}
if (countX !== countOther) {
answer++;
break;
}
}
return answer;
}
✏️풀이
answer 변수를 0으로 초기화합니다.
while 루프를 통해 문자열 s가 빈 문자열이 될 때까지 반복합니다.
첫 글자를 x로 설정하고, countX와 countOther를 각각 1과 0으로 초기화합니다.
for 루프를 통해 문자열 s의 두 번째 글자부터 마지막 글자까지 순회합니다.
현재 글자가 x와 같으면 countX를 증가시키고, 그렇지 않으면 countOther를 증가시킵니다.
countX와 countOther의 값이 같아지는 순간, 현재까지 읽은 부분을 분리하고 남은 부분으로 설정합니다. (s.slice(i + 1)을 통해 분리) countX와 countOther의 값이 다른 상태에서 for 루프가 문자열의 끝까지 도달하면, 현재까지 읽은 부분을 분리하고 종료합니다.
분해한 문자열의 개수인 answer를 증가시킵니다.
answer를 반환하여 결과를 출력합니다.
코딩테스트 28일차
크기가 작은 부분문자열
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
function solution(t, p) {
var answer = 0;
var len = p.length;
for (var i = 0; i <= t.length - len; i++) {
var substr = t.substring(i, i + len);
if (parseInt(substr) <= parseInt(p)) {
answer++;
}
}
return answer;
}
✏️풀이
먼저, solution 함수는 문자열 t와 문자열 p를 매개변수로 받습니다. 이 함수는 t에서 길이가 p와 같은 부분문자열 중에서 p가 나타내는 수보다 작거나 같은 수가 나오는 횟수를 반환하는 역할을 합니다.
코드의 첫 번째 줄에서는 answer라는 변수를 0으로 초기화합니다. 이 변수는 p가 나타내는 수보다 작거나 같은 수가 나오는 횟수를 저장할 변수입니다.
다음으로, len이라는 변수에 p의 길이를 저장합니다. 이렇게 함으로써 추후에 p와 길이가 같은 부분문자열을 추출할 때 사용됩니다.
그 다음은 반복문입니다. for 문을 사용하여 i 변수를 0부터 t의 길이에서 p의 길이를 뺀 값까지 1씩 증가시킵니다. 이렇게 함으로써 모든 가능한 부분문자열을 순회할 수 있습니다.
안쪽에 있는 substring() 함수는 t 문자열에서 길이가 p와 같은 부분문자열을 추출하는 역할을 합니다. substring(i, i + len)은 t에서 인덱스 i부터 길이 len만큼의 부분문자열을 추출합니다.
다음으로, parseInt() 함수를 사용하여 추출한 부분문자열과 p를 정수로 변환합니다. parseInt() 함수는 문자열을 정수로 변환하는 내장 함수입니다.
그 후, 변환한 정수를 비교하여 부분문자열이 p보다 작거나 같은지 확인합니다. 작거나 같으면 answer 변수를 1 증가시킵니다. 이렇게 함으로써 p가 나타내는 수보다 작거나 같은 부분문자열을 찾아 개수를 세게 됩니다.
마지막으로, answer 변수를 반환하여 결과를 출력합니다.
문자열 나누기
문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요.
function solution(s) {
var answer = 0;
while (s.length > 0) {
var x = s[0]; // 첫 글자를 x로 설정
var countX = 1; // x의 개수를 카운트
var countOther = 0; // x가 아닌 다른 글자의 개수를 카운트
for (var i = 1; i < s.length; i++) {
if (s[i] === x) {
countX++;
} else {
countOther++;
}
if (countX === countOther) {
answer++;
s = s.slice(i + 1); // 현재까지 읽은 부분을 분리하고 남은 부분으로 설정
break;
}
}
if (countX !== countOther) {
answer++;
break;
}
}
return answer;
}
✏️풀이
answer 변수를 0으로 초기화합니다.
while 루프를 통해 문자열 s가 빈 문자열이 될 때까지 반복합니다.
첫 글자를 x로 설정하고, countX와 countOther를 각각 1과 0으로 초기화합니다.
for 루프를 통해 문자열 s의 두 번째 글자부터 마지막 글자까지 순회합니다.
현재 글자가 x와 같으면 countX를 증가시키고, 그렇지 않으면 countOther를 증가시킵니다.
countX와 countOther의 값이 같아지는 순간, 현재까지 읽은 부분을 분리하고 남은 부분으로 설정합니다. (s.slice(i + 1)을 통해 분리) countX와 countOther의 값이 다른 상태에서 for 루프가 문자열의 끝까지 도달하면, 현재까지 읽은 부분을 분리하고 종료합니다.
분해한 문자열의 개수인 answer를 증가시킵니다.
answer를 반환하여 결과를 출력합니다.