한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다.
한국중학교 학생들의 번호를 나타내는 정수 배열 number
가 매개변수로 주어질 때, 학생들 중 삼총사를 만들 수 있는 방법의 수를 return 하도록 solution 함수를 완성하세요.
number
의 길이 ≤ 13number
의 각 원소 ≤ 1,000class Solution {
fun solution(number: IntArray): Int {
var count = 0
for(a in number.indices){
for(b in number.indices){
for(c in number.indices){
if(a < b && b < c){
if(number[a]+number[b]+number[c]==0){
count++
}
}
}
}
}
return count
}
}
이제 문제가 짱 길어짐.. 비몽사몽해서 앉아서 글 읽으니까 문제 이해하는데에도 오래걸린다.
배열안의 숫자를 더 해야하는데 반복문으로 하는 방법 밖에 모르겠어서
삼중으로 반복문 써서 하는게 과연 맞을까 반신반의해서 일단 해봤는데 되긴했다..
반복문 돌면서 인덱스가 겹치는 애들은 빼야하니까 a<b<c 가 만족되는 경우에만
해당 인덱스 값을 더하고 0이되면 count를 1씩 올려줬다..
class Solution {
fun solution(number: IntArray): Int {
var threeMusketeersCount = 0
for ((i,n) in number.withIndex()) {
for ((j, m) in number.withIndex()) {
for ((k, l) in number.withIndex()) {
if ((i < j) && (j < k)) {
if (n + m + l == 0) {
threeMusketeersCount++
}
}
}
}
}
return threeMusketeersCount
}
}
이 분도 비슷하지만 for문에서 withIndex()를 써서 보기에 좀더 단순한거같기도?
class Solution {
fun solution(number: IntArray): Int {
var answer: Int = 0
for(i in 0 .. number.size-3){
for(j in i+1 .. number.size-2){
for(k in j+1 .. number.size-1){
if(number[i]+number[j]+number[k] == 0) answer++
}
}
}
return answer
}
}
이 분은 나랑 비슷하게 삼중으로 반복문을 돌리지만
반복문 범위를 지정할 때
시작범위를 i , i+1 , j +1 로,
끝범위를 number.size에서 -3, -2 -1 해주는 식으로 반복 범위를 줄여서 더 단순하게 했다.
나도 반복문 범위 지정을 더 신중하게 했으면 좋았을 것 같다.