https://www.acmicpc.net/problem/1592
영식이와 친구들 1592번
문제 재정의:
사람 n명,
한 사람이 공을 m번 받으면 종료된다,
m보다 적게 공을 받은 사람이 L번째 사람에게 시계방향으로 공을 준다.
짝수번이면 반시계 방향으로 L번째 사람에게 공을 준다.
공을 총 몇 번 던지는지 출력
생각한 것:
- 1번 자리는 자동으로 공 받은 횟수=1
- 배열로 하기로 함
-> 사람수가 고정적이고 순회하는 문제이기에 순회 빠를 것 같아서 - 본인이 공을 받은 횟수 알아둬야 함, 이게 홀/짝인지 알고 있어야 함
-그래야 m번째 됐을때 멈출 수 있음
- 시계방향 반시계 방향은 어떻게 순회?
그냥 ++, --하고, 제일 오른쪽 값 가면 첫 번째로 돌아가게
- 총 몇 번 공 던지는지 total값
- 사람의 인덱스 번호 알아둬야 함
-그래야 l번째 사람이 누군지 앎
코드
package till;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
st = new StringTokenizer(br.readLine()); //공백 기준으로 나눔
int n = Integer.parseInt(st.nextToken()); //사람수
int m = Integer.parseInt(st.nextToken()); //최대 던진 횟수
int l = Integer.parseInt(st.nextToken()); //몇번째 사람
int people[] = new int[n+1];//인덱스 1부터 유효
//배열 1인덱스 빼고 0으로 초기화
for(int i=0;i<people.length;i++){
if(i==1){
people[1]=1; //1번 자리는 자동으로 공 받은 횟수=1
}
else
people[i]=0;//다른 사람은 0으로 초기화
}
int result=0;
int t=1;
while(true){
if(people[t]%2==0){//받은 횟수가 짝수일때 반시계방향
if(check(people)==m){ //최대 던짓 횟수 도달하면 while문 종료
break;
}
else{
t=t-l;//반시계 방향이니 인덱스 마이너스
if(t<=0){ //인덱스 마이너스 되면 순회시키기 위해 n플러스 해줌
t=n+t;
}
people[t]=people[t]+1;
result++;
}
}
else if(people[t]%2==1){//받은 횟수가 홀수일때 시계방향
if(check(people)==m){ //최대 던짓 횟수 도달하면 while문 종료
break;
}
else{
t=t+l;//시계 방향이니 인덱스 플러스
if(t>n){ //인덱스 n 넘으면 순회시키기 위해 n마이너스 해줌
t=t-n;
}
people[t]=people[t]+1;
result++;
}
}
}
System.out.println(result);
}
public static int check(int[] array){ //현재 배열의 제일 큰수가 뭔지
int pivot=array[1];
for(int i=2;i<array.length;i++){
if(pivot<array[i]){
pivot=array[i];
}
}
return pivot;
}
}
깨달은 점:
최대 던짓 횟수 도달하면 while문 종료하는 if문을 앞으로? 빼서 도달 안 했을 때의 작업을 else문에 넣는 것.
처음엔 if문 - if문으로 했었어서 첨엔 답 틀리게 나옴.
정답율 60% 이상인 것-생각한 대로 코딩하면 바로 답 나오는 듯. 이상한 실수만 안 하면
'ALGORITHM > Implement' 카테고리의 다른 글
[JAVA] 백준 1789번 (0) | 2019.09.01 |
---|---|
[JAVA] 백준 10871번 (0) | 2019.09.01 |
[JAVA] 백준 2455번 (0) | 2019.08.25 |
[JAVA] 백준 1173번 (0) | 2019.08.17 |
[JAVA] 프로그래머스 가장 큰 수 (0) | 2019.07.15 |
Comments