일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 |
- 해킹실습
- SQL 정리
- SQL 문법
- 알고리즘
- SQL
- 빅데이터
- 이클립스
- 데이터베이스
- 기초
- 프로그래밍
- 토이프로젝트
- 백준
- MySQL
- 스파크
- 스프링부트
- 스프링
- 리눅스마스터 2급 2차
- 엘라스틱서치
- 위클리챌린지
- 필기
- 문제풀이
- 오라클
- 파이썬
- 프로그래머스
- 문법
- 모의해킹
- c언어
- 코딩테스트
- 데이터프로그래밍
- 자바
- Today
- Total
개발일기
백준 1323번 JAVA 풀이 - 숫자 연결하기 본문
문제
영훈이는 태형이에게 어떤 수 N과 K를 주었다.
태형이는 N을 종이에 쓰기 시작했다. 태형이는 자신이 이 수를 몇 번 써야 그 수가 K로 나누어지는지 궁금해지기 시작했다.
N=10일 때, 이 수를 한 번 쓰면 10이고, 두 번 쓰면 1010이고, 세 번쓰면 101010이고,... 이런식이다.
어떤 수 N과 K가 주어졌을 때, N을 몇 번 써야 K로 나누어 떨어지는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다. K는 100,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 몇 번 써야하는지 그 최솟값을 출력한다. 만약 아무리 써도 불가능할 경우에는 -1을 출력한다.

# 문제풀이
N을 K로 나눈 나머지에 2를 붙이는 것과 N에 2를 붙여서 K로 나눈 나머지는 동일하다.
예를들어 22를 9로 나눈 나머지는 4이고, 222를 9로 나눈 나머지는 6이다.
하지만 22를 9로 나눈 나머지 4에 2를 붙여 42를 9로 나눈 나머지 또한 6이다.
같은 나머지가 계속 나올 경우 해당 수는 나누어 떨어질 수 없기 때문에 -1을 출력하면 된다.
1. 나머지를 넣을 HashSet을 선언한다.
HashSet<Long> set = new HashSet<>();
2. calc은 입력받은 n을 대입해주고 나머지를 계속해서 넣어준다.
이때 calc이 0이 될 경우 나누어 떨어 진 것이기 때문에 반복문을 멈춰주고 그게 아닐 경우 HashSet에 동일한 나머지가 있는지 확인, 있다면 -1을 출력, 없다면 HashSet에 넣고 다시 n을 calc에 이어준다.
answer++;
calc %= k;
if(calc == 0) break;
if(!set.add(calc)){
System.out.println(-1);
return;
}
calc = appendNum(calc, n);
3. appendNum
나눈 나머지 calc에 입력 값 n을 이어주는 함수이다.
각각 long 형 int 형을 string 형으로 변환한 후 다시 Long 형으로 변환 그 값을 리턴한다.
static long appendNum(long num, int n){
String temp = Long.toString(num) + Integer.toString(n);
return Long.parseLong(temp);
}
# 전체 코드
import java.util.*;
public class Main_1323 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
long calc = n;
int answer = 0;
HashSet<Long> set = new HashSet<>();
while(true){
answer++;
calc %= k;
if(calc == 0) break;
if(!set.add(calc)){
System.out.println(-1);
return;
}
calc = appendNum(calc, n);
//System.out.println(calc);
}
System.out.println(answer);
}
static long appendNum(long num, int n){
String temp = Long.toString(num) + Integer.toString(n);
return Long.parseLong(temp);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 1531번 JAVA 풀이 - 투명 (0) | 2022.06.24 |
---|---|
백준 1353번 JAVA 풀이 - 합과 곱 (2) | 2022.06.22 |
백준 1041번 JAVA 풀이 - 주사위 (0) | 2022.06.18 |
백준 1235번 JAVA 풀이 - 학생번호 (0) | 2022.06.17 |
백준 1359번 JAVA 풀이 - 복권 (0) | 2022.06.16 |