본문 바로가기

Java/프로그래머스

[JAVA] 프로그래머스 - 공 던지기

코딩테스트 연습 - 공 던지기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

System.arraycopy 배열 복사 

 

 

Syste.arraycopy(src,srcPos,dest,destPos,length)

 

Object src

- 복사하고자 하는 소스

 

int srcPos

- 위의 원본 소스에서 어느 부분을 읽어올지 위치를 정함 

 

Object dest

- 복사할 소스, 복사하려는 대상 

 

int destPos

- 위의 복사본에서 자료를 받을 때, 어느 부분부터 쓸 것인지 시작 위치

 

int length

- 원본에서 복사본으로 데이터를 읽어서 쓸 데이터 길이 

System.arraycopy(전송원배열, 소스 배열의 개시 위치, 전송처 배열, 전송처 데이터내의 게시 위치, 카피되는 배열 요소의 수)

 

정답 

 

 

import java.util.Arrays;

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        int count = 0;
        
        int newnum[] = new int[numbers.length*k];
        
        // 변수 k번째 반복
        for (int i = 0; i < k; i++) {
            // 기존 배열의 요소를 새 배열로 복사
            System.arraycopy(numbers, 0, newnum, i * numbers.length, numbers.length);
        }
        
        
        for(int i=0; i<newnum.length; i+=2)
        {
            count++;
            
            if(count==k)
            {
                answer = newnum[i];
            }
        }
        return answer;
    }
}

 

 

다른 사람의 풀이 

 

import java.util.*;

class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;

        Queue<Integer> queue = new LinkedList<>();
        for(int num : numbers) queue.add(num);

        int cnt = 1;
        while(cnt !=k){
            queue.add(queue.poll());
            queue.add(queue.poll());
            cnt++;
        }
        answer = queue.poll();
        return answer;
    }
}

 

 

class Solution {
    public int solution(int[] numbers, int k) {
        return (k-1)*2 % numbers.length+1;
    }
}