IT/Programmers
[Programmers/ 코딩테스트 입문] 공던지기 ****다시보기
안선생 Dr.Ahn
2022. 12. 15. 18:37
728x90
반응형
공던지기 (Java)
슬애기 같으니까 반면교사 삼아야 할 내 코드
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
int cnt = 0;
int idx = 0;
for(int i = 0; i < k*2; i = i + 2){
cnt++;
idx = i%numbers.length;
if(cnt == k) break;
}
answer = idx+1;
return answer;
}
}
수정한 코드
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
answer = ((k-1)*2)%numbers.length +1;
return answer;
}
}
하나씩 건너니까 k*2번째인데, 1번(index = 0)이 무조건 포함되기 때문에 처음에 k에서 1을 빼준다.
배열이 반복될 수 있도록 numbers.length로 mod 해주면 그게 답의 index가 된다.
배열의 값은 index +1 이므로 굳이 배열에서 꺼내지 않고 +1로 해주었다.
내가 배워야 할 코드
class Solution {
public int solution(int[] numbers, int k) {
int answer = 0;
answer = numbers[((1 + ((k-1)*2))%numbers.length) - 1];
return answer;
}
}
class Solution {
public int solution(int[] numbers, int k) {
return (k-1)*2 % numbers.length+1;
}
}
class Solution {
public int solution(int[] numbers, int k) {
return numbers[((k-1)*2)%numbers.length];
}
}
k-1을 왜 하는지 아직도 이해가 가지 않는다..
내가 하고싶었던 코드
import java.util.stream.IntStream;
class Solution {
public int solution(int[] numbers, int k) {
return IntStream.range(1, k)
.mapToObj(i -> numbers)
.flatMapToInt(IntStream::of)
.toArray()[2 * k - 2];
}
}
*********
728x90
반응형