항해 99클럽 코테
99클럽 코테 스터디 2일차 TIL
metamong-data
2024. 10. 29. 16:49
728x90
반응형
오늘의 학습 키워드
문자열
과제
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.
예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.
풀이 과정
- p의 개수에 따라서 t에서 가져올 숫자 개수가 달라지기에 p의 개수를 제일 먼저 계산하고자 했다!
- list comprehension을 이용해서 최대한 짧은 줄을 사용하고 연산 속도를 줄이고자 했다!
- 포기했다! 먼가 꼬여서 산으로 가는 것을 확인하고, 일단 문제 풀기에 집중 했다!
- i를 기준으로 p의 문자열을 하나씩 옮기고 p의 길이만큼 list slice를 이용해서 p와 크기를 비교해서 하고자 했다.
- t길이 보다 많은 수를 list slice를 이용하더라도 오류가 나지 않는 것을 알게 되었고, t개수가 i+ plength가 넘치지 않도록 조건을 주어서 문제를 풀었다!
제출 코드
def solution(t, p):
answer = 0
plength = len(p)
i = 0
while t[i:i+plength] and len(t) >=i+plength:
if t[i:i+plength] <= p:
answer+=1
i+=1
return answer
다른 언어로 문제 풀기
C언어
#include <stdio.h>
#include <string.h>
int solution(const char* t, const char* p) {
int answer = 0;
int p_length = strlen(p);
int t_length = strlen(t);
for(int i = 0; i <= t_length - p_length; i++) {
// 직접 문자 비교
int j;
for(j = 0; j < p_length; j++) {
if(t[i + j] != p[j]) {
break;
}
}
// 같은 자리수까지 같다면 마지막 비교한 문자로 판단
if(j == p_length || t[i + j] < p[j]) {
answer++;
}
}
return answer;
}
int main() {
printf("%d\\n", solution("3141592", "271")); // 2
printf("%d\\n", solution("500220839878", "7")); // 8
return 0;
}
C++
#include <string>
#include <vector>
using namespace std;
int solution3(string t, string p) {
int answer = 0;
int p_length = p.length();
int t_length = t.length();
for(int i = 0; i <= t_length - p_length; i++) {
bool is_less_or_equal = true;
for(int j = 0; j < p_length; j++) {
if(t[i + j] > p[j]) {
is_less_or_equal = false;
break;
}
else if(t[i + j] < p[j]) {
break;
}
}
if(is_less_or_equal) answer++;
}
return answer;
}
int main() {
cout << solution3("3141592", "271") << endl; // 2
cout << solution3("500220839878", "7") << endl; // 8
return 0;
}
오늘의 회고
- 문제를 푸는데 집중하고 난 후에 최적화 하는 방향으로 해야겠다!
- 여러가지 언어를 이용해서 풀어보고, 이해하자!
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/12916
728x90