삼총사
문제 설명
한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 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 까지 자른다. (또는 <= 조건으로 변경하면 가능)
'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 |