https://www.acmicpc.net/problem/1614
- 예제 입력1
2
3
- 예제 출력1
15
- 예제 입력2
1
0
- 예제 출력2
0
- 예제 입력3
5
0
- 예제 출력3
4
- 예제 입력4
2
48
- 예제 출력4
193
- 예제 입력5
5
973
- 예제 출력5
7788
- 예제 입력6
3
99999
- 예제 출력6
399998
- 문제 접근
- 패턴은 1 → 2 → 3 → 4 → 5 → 4 → 3 → 2로 반복
- 다친 손가락이 패턴을 몇 번 반복할 수 있는 지 확인
- 8 * 반복 가능한 패턴
- 패턴은 온전히 반복하지 못할 때 1개씩 계산
- 문제 해결
- 다친 손가락으로 셀 수 있는 수는 10억이하로 int가 아닌 long 선언 필요
- 패턴 배열 생성 [1, 2, 3, 4 ,5 ,4 ,3, 2]
- 다친 손가락이 1패턴에 몇 번 등장하는 지 확인
- 전체 패턴 = 다친 손가락 사용 가능 횟수 / 1패턴에 다친 손가락 사용 횟수
- 나머지 = 다친 손가락 사용 가능 횟수 % 1패턴에 다친 손가락 사용 횟수
- 슈도 코드
hurtFinger (다친 손가락 번호 저장)
limitCount (사용 가능 횟수 저장)
pattern[] (패턴 배열 저장)
patternInCount (1패턴에 등장하는 다친 손가락 횟수)
for(pattern만큼 반복){
if(pattern값과 hurtFinger가 같다면)
patternInCount 1증가
}
fullPatternCount = limitCount / patternInCount
remainder = limitCount % patternInCount
num = fullPatternCount * pattern의 길이
for(i = 0 ~ pattern길이 -1 반복){
if(remainder==0) break;
if(pattern[i]가 hurtFinger와 같다면)
remainder 1감소
num 1 증가
}
- 코딩하기
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int hurtFinger = scan.nextInt();
int limitCount = scan.nextInt();
int[] pattern = new int[]{1, 2, 3, 4, 5, 4, 3, 2};
int hurtFingerPatternCount = 0;
for(int order : pattern){
if(order == hurtFinger){
hurtFingerPatternCount++;
}
}
int fullPatternCount = limitCount / hurtFingerPatternCount; // 패턴 반복 가능 횟수
int remainder = limitCount % hurtFingerPatternCount; // 남은 다친 손가락 사용 가능 횟수
long num = (long) fullPatternCount * pattern.length;
for(int i = 0; i < pattern.length; i++){
if(pattern[i] == hurtFinger){
if(remainder == 0) break;
remainder--;
}
num++;
}
System.out.println(num);
}
'Coding Test > Problem Number' 카테고리의 다른 글
[Java] 재귀함수가 뭔가요? [17478번] (0) | 2024.07.19 |
---|---|
[Java] 반복 수열 [2231번] (0) | 2024.07.18 |
[Java] 방 번호 [2740번] (0) | 2024.07.18 |
[Java] 행렬 곱셈 [2740번] (0) | 2024.07.18 |
[Java] 2차원 배열의 합 [2167번] (0) | 2024.07.18 |