아이딕
아이딕 IT블로그
아이딕
전체 방문자
오늘
어제
  • 분류 전체보기 (44)
    • Algorithm (9)
      • BackJoon (0)
      • Programmers (5)
      • Data Structure (4)
    • Java (5)
    • Spring (1)
    • SQL (2)
      • MSSQL (1)
    • JavaScript (7)
    • React (3)
    • HTML (0)
    • CSS (1)
    • Build Tool (0)
      • Gradle (0)
      • Maven (0)
    • Tomcat (1)
    • Git (2)
    • IDE (3)
    • Error Log (1)
    • 개발 지식 (9)
    • 도서 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Git
  • 코딩테스트
  • GitHub
  • VSCode
  • 깃허브
  • IntelliJ
  • react
  • 스코프
  • 인텔리제이
  • codingTest
  • JavaScript
  • JVM
  • 자바자료구조
  • 알고리즘
  • 자바
  • 블록레벨스코프
  • Java 문자열 처리 최적화
  • Algorithm
  • java Data Structure
  • 자바스크립트
  • 변수호이스팅
  • 프로그래머스
  • ES6
  • springboot
  • Java
  • 자료구조
  • 리액트
  • 함수레벨스코프
  • programmers
  • 호이스팅

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아이딕

아이딕 IT블로그

Algorithm/Programmers

프로그래머스[Level 1] - 나머지가 1이 되는 수 찾기 (java)

2022. 9. 14. 08:00
728x90
반응형

- 문제 설명

자연수 n이 매개변수로 주어집니다.
n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요.
답이 항상 존재함은 증명될 수 있습니다.

- 제한 조건

  • 3 ≤ n ≤ 1,000,000

 

- 나의 풀이

class Solution {
    public int solution(int n) {
		int answer = 1;
		boolean loof = true;

		while(loof){
			if(n%answer != 1){
				answer++;    //  n % answer != 1일 때
			}else{
				loof = false; // n % answer == 1일 때
			}
		}
		return answer;
    }
}

n을 x로 나눈 나머지 값이 1인 가장 작은 수, x를 구하는 문제로,  현재 내가 풀이한 코드에서 x는 answer을 의미한다.

answer을 구하기 위해서 while문을 돌리면서 n값과 answer값을 나눈 나머지가 1이 되지 않으면 answer값을 1씩 증가시키고,  n값과 answer값을 나눈 나머지가 1이 되었을때 while문을 멈추고, 그 값을 return해준다.

 

- 다른사람의  풀이

 

class Solution {
    public int solution(int n) {
        int answer = 0;
        for (int i=2; i<n; i++) {
            if (n % i == 1) {
                answer = i;
                break;
            } 
        }
        return answer;
    }
}

 while문을 이용해 문제를 해결한 나와 달리 for문을 이용해서 문제를 해결한 사람도 있었다.

이 문제에서 while문을 사용하던 for문을 사용하던 성능적인 측면을 제외하고는 풀이 방법이 비슷하다.

이 밖에도 stream을 이용해서 문제를 해결하신 분들도 있었다.

 

import java.util.stream.IntStream;

class Solution {
    public int solution(int n) {
        return IntStream.range(2, n).filter(i -> n % i == 1).findFirst().orElse(0);
    }
}

stream을 이용하면 코드가 간결해 지지만 적은 양의 코드에서는 성능이 좋지 않다고 들었기 때문에, 좋은 방법이라고 생각은 안하지만 요즘 문제를 풀면서 다른 사람의 풀이를 보면 stream을 이용해서 문제를 풀이하는 사람들이 항상있는 것 같다..

 

문제 출처 : https://programmers.co.kr/learn/challenges

728x90
반응형

'Algorithm > Programmers' 카테고리의 다른 글

프로그래머스[Level 1] - 정수 제곱근 판별 (java)  (0) 2022.10.03
프로그래머스[Level 1] - 평균 구하기 (java)  (0) 2022.09.15
프로그래머스[Level 1] - 자릿수 더하기 (java)  (0) 2022.09.15
프로그래머스[Level 1] - 직사각형 별 찍기 (java)  (0) 2022.09.13
    'Algorithm/Programmers' 카테고리의 다른 글
    • 프로그래머스[Level 1] - 정수 제곱근 판별 (java)
    • 프로그래머스[Level 1] - 평균 구하기 (java)
    • 프로그래머스[Level 1] - 자릿수 더하기 (java)
    • 프로그래머스[Level 1] - 직사각형 별 찍기 (java)
    아이딕
    아이딕
    IT, 개발, 공부, 정리, 기타

    티스토리툴바