본문 바로가기

Algorithm

TIL 240926 - 알고리즘 9회차

삼총사

문제 설명
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.

한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.

제한사항
3 ≤ number의 길이 ≤ 13
-1,000 ≤ number의 각 원소 ≤ 1,000
서로 다른 학생의 정수 번호가 같을 수 있습니다.


나의 풀이

class Solution {
    public int solution(int[] number) {
        int answer = 0;

        for(int i = 0; i<number.length-2;i++){
            for(int j=i+1;j<number.length-1;j++){
                for(int k=j+1;k<number.length;k++){
                    int sum = number[i]+number[j]+number[k];
                    if(sum==0){
                        answer++;
                    }
                }
            }
        }
        return answer;
    }
}


이 문제는 나를 제외한 대부분의 사람들이 이렇게 풀었다고 나온다. 물론 이 구현식이 한 줄이기 때문에 if 뒤에{} 는 필요없다.


크기가 작은 부분문자열

문제 설명
숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요.

예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다.

제한사항
1 ≤ p의 길이 ≤ 18
p의 길이 ≤ t의 길이 ≤ 10,000
t와 p는 숫자로만 이루어진 문자열이며, 0으로 시작하지 않습니다.

 

 

나의 풀이

class Solution {
    public int solution(String t, String p) {
        int answer = 0;
        long pNum = Long.parseLong(p); //p를 long 타입 정수로 바꿔서 대입
        int lengthP=p.length(); //문자열 p의 길이
        
        for(int i=0;i<t.length()-lengthP+1;i++){
            long subNum = Long.parseLong(t.substring(i,i+lengthP)); //t를 p 길이만큼 자름 
            if(subNum<=pNum) answer++;
        }
        return answer;
    }
}


for문의 범위지정할때, t.length()-lengthP 로만 해뒀더니, 예시 3번에서 오류가 났었다.

t 10203 p 15 일때, t.length() 는 5, lengthP 는 2.
i 가 0부터 시작하여 3까지 할때, 실제로 자르는건 인덱스 01 12 23 까지만 자른다. 즉, 10 02 20 03 로 잘라야하는데 10 02 20까지만 잘라서, +1을 해주어야 03 까지 자른다. (또는 <= 조건으로 변경하면 가능)

728x90
반응형

'Algorithm' 카테고리의 다른 글

TIL 240930 - 알고리즘 11회차  (1) 2024.09.30
TIL 240930 - 알고리즘 10회차  (6) 2024.09.30
TIL 240925 - 알고리즘 8회차  (0) 2024.09.25
TIL 240924 - 알고리즘 7회차  (4) 2024.09.24
TIL 240923 - 알고리즘 6회차  (6) 2024.09.23