티스토리 뷰
레벨 2 문제인데도 불구하고 정답률이 31.06%밖에 안되서..헉 2단계도 엄청 어렵나 싶었는데, 문제를 보니 간단해보였다.
그래서 함정이 있나 싶었지만..역시 나는 함정을 찾지 못하고 3번이나 틀렸당ㅎㅎ
물론 첫번째는 1000000007로 나눈 수를 출력한게 아니라 바이러스 최종 바이러스 수를 출력해서였지만..그래도..
문제
바이러스가 숙주의 몸속에서 1초당 P배씩 증가한다.
처음에 바이러스 K마리가 있었다면 N초 후에는 총 몇 마리의 바이러스로 불어날까? N초 동안 죽는 바이러스는 없다고 가정한다.
https://softeer.ai/practice/info.do?idx=1&eid=407
Softeer
연습문제를 담을 Set을 선택해주세요. 취소 확인
softeer.ai
제약조건
1 ≤ K ≤ 10^8인 정수
1 ≤ P ≤ 10^8인 정수
1 ≤ N ≤ 10^6인 정수
입력형식
첫 번째 줄에 처음 바이러스의 수 K, 증가율 P, 총 시간 N(초)이 주어진다.
출력형식
최종 바이러스 개수를 1000000007로 나눈 나머지를 출력하라.
입력예제1
2 3 2
출력예제1
18
틀린 코드
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int P = sc.nextInt();
int N = sc.nextInt();
int result = K;
for (int i=1; i<=N; i++) {
result = (result*P)%1000000007;
}
System.out.println(result);
}
}
유의점
1. 최종 바이러스를 1000,000,007로 나눈 결과를 출력해야하지만, 중간에 나누면, 결과값이 커지는 것을 방지 할 수 있다.
2. int의 범위를 확인해보자.
- int의 범위는 -2,147,483,647 ~ 2,147,483,647이다.
- 2*3*1,000,000,0007을 1,000,000,0007로 나눈 나머지는 1,000,000,0007이다. (result) 여기에 다시 *3을 하면 int의 범위를 초과한다.
정답코드
- result 변수의 자료형식을 long으로 변경해주었다.
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String args[])
{
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int P = sc.nextInt();
int N = sc.nextInt();
long result = K;
for (int i=1; i<=N; i++) {
result = (result*P)%1000000007;
}
System.out.println(result);
}
}
'알고리즘 > 코딩테스트' 카테고리의 다른 글
[softeer/java] 지도 자동 구축 (0) | 2023.08.01 |
---|---|
[softeer/java]비밀메뉴 (0) | 2023.08.01 |
[softeer/java]회의실 잡기 (0) | 2023.07.31 |
[softeer/java] GBC (0) | 2023.07.30 |
[softeer/java] 전광판 (0) | 2023.07.30 |
- Total
- Today
- Yesterday
- 코딩테스트
- 쿠버네티스
- 코테
- Linux
- 자바코테
- java 코테
- 현대오토에버
- 현대
- centos
- softeer
- react
- 오토에버코테
- tomcat
- Docker
- softeer java
- 톰캣
- 리액트
- 자바
- Kubernetes
- java
- 현대코테
- javascript
- springboot
- 자바스크립트
- 전자정부프레임워크
- 도커
- mysql
- 스프링
- Spring
- 아파치카프카
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |