250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • data
  • certificate
  • 문제풀이
  • AI
  • SpringMVC
  • swift
  • ADsP
  • 알고리즘
  • 개발
  • 백준
  • java
  • 브루트포스
  • DP
  • Python
  • BOJ
  • 프로그래머스
  • 코딩테스트
  • ios
  • 자바
  • 파이썬
  • 구현
  • JPA
  • 머신러닝
  • 개발자
  • uArm
  • 선형대수
  • BFS
  • Front-end
  • JAVA8
  • 카카오

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim
CodingTest/Backjoon

[Backjoon_4375] 1 (Java)

[Backjoon_4375] 1 (Java)
CodingTest/Backjoon

[Backjoon_4375] 1 (Java)

2021. 11. 4. 16:22
728x90
728x90

문제 링크

https://www.acmicpc.net/problem/4375

 

4375번: 1

2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성하시오.

www.acmicpc.net

문제 요약

더보기
더보기
더보기

<문제>

2와 5로 나누어 떨어지지 않는 정수 n(1 ≤ n ≤ 10000)가 주어졌을 때, 1로만 이루어진 n의 배수를 찾는 프로그램을 작성한다.

 

<입력>

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있고, n이 주어진다.

 

<출력>

1로 이루어진 n의 배수 중 가장 작은 수의 자리수를 출력한다.

 

<제한사항>

시간 제한 1초

메모리 제한 128MB

 

문제 풀이

n을 입력받아 n의 배수중 1로만 이루어진 가장 작은수를 찾는 문제이다.

n의 배수 == n으로 나누면 0  이므로 1로 수를 만들어 n으로 mod  연산을 하여 0이 되는 값을 찾는 방법으로 해결할 수 있다.

1을 추가하여 계산을 할 경우 integer max범위를 넘어갈 수 있으므로 나머지 연산의 특징을 활용하여 해결하여야 한다.

 

우선 1을 추가할 때의 규칙을 파악하였다.

a1 = 1 

a2 = 11 (a2 = a1*10 + 1)

a3 = 111 (a3 = a2*10 + 1)

a4 = 1111 (a4 = a3*10 + 1)

이므로 전 값에서 10을 곱하고 1을 더하면 되는것을 알 수 있다.

int prev = 0;
for(int i = 1;;i++){
	prev = (prev*10+1)%num;
    if(prev == 0) {
    	System.out.println(i);
        break;
    }
}

%연산은 *와 + 에서 분배법칙이 성립하므로 이전에 구한 값에 10을 곱하고 1을 더한 후 %연산을 하여도 똑같다.

for문으로 현재 1의 개수를 표현하여주고, 주어진 num으로 %연산을 하고 만약 나누어 떨어지면 출력하는 방법으로 해결하였다.

 

구현 코드

더보기
더보기
더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        while(sc.hasNextInt()){
            int num = sc.nextInt();
            int prev = 0;
            for(int i = 1;;i++){
                prev = (prev*10+1)%num;
                if(prev == 0) {
                    System.out.println(i);
                    break;
                }
            }
        }
    }
}

 

시간복잡도

Test Case 문제로 테스트케이스의 수 * 나머지 연산 이다.

O(T*C) ( T : 테스트케이스 수 , C : 나머지 연산해서 찾는 수)

728x90
728x90
저작자표시 비영리

'CodingTest > Backjoon' 카테고리의 다른 글

[backjoon_15990] 1,2,3 더하기 5(Java)  (0) 2021.11.17
[Backjoon_11052] 카드 구매하기(Java)  (0) 2021.11.15
[Backjoon_14391] 종이조각 (Java)  (0) 2021.11.13
[Backjoon_1182] 부분수열의 합(Java)  (0) 2021.11.10
[Backjoon_10971] 외판원 순회 2  (2) 2021.11.07
  • 문제 링크
  • 문제 요약
  • 문제 풀이
  • 구현 코드
  • 시간복잡도
'CodingTest/Backjoon' 카테고리의 다른 글
  • [Backjoon_11052] 카드 구매하기(Java)
  • [Backjoon_14391] 종이조각 (Java)
  • [Backjoon_1182] 부분수열의 합(Java)
  • [Backjoon_10971] 외판원 순회 2
JinSeopKim
JinSeopKim
기록📚

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.