문제]
N개의 칸에 1 부터 N 까지의 수들이 왼쪽부터 순서대로 저장되어 있다. 또, 각 칸은 왼쪽부터 1 부터 N까지 순서대로 번호가 붙어 있다. 즉, 처음에는 각 칸의 번호와 각 칸에 저장된 수가 같다.
아래 그림은 N = 7일 때의 예이다.
다음 작업을 수가 정확히 하나가 남을 때 까지 반복한다.
(A) 홀수번 칸의 수들을 모두 지운다 (B) 남은 수들을 왼쪽으로 모은다. 제일 첫 작업의 (A) 단계가 끝나면 칸들의 상태는 다음과 같을 것이다.
(B) 단계가 끝나면 다음과 같을 것이다.
두번째 작업이 진행되면 칸들은 아래 두 그림과 같이 바뀔 것이다.
이제 수가 하나 남았으므로 작업은 더 이상 진행되지 않는다.
N을 입력으로 받아 위와 같이 작업을 진행했을 때 마지막으로 남는 수를 계산하는 프로그램을 작성하라.
제약 조건
▶ 1 ≤ N ≤ 100
부분문제
1. (5점) 입출력 예제만이 주어짐.
2. (15점) N ≤ 8
3. (30점) N은 1, 2, 4, 8, 16, 32, 64 중 하나이다.
즉, N은 1이거나, 2이거나, 2를 여러 번 곱한 수 중 하나이다.
4. (50점) 추가 제약 조건 없음
입력 형식
첫 번째 줄에 정수 N이 주어진다.
출력 형식
마지막으로 남는 수를 한 줄에 출력한다
입력예제1]
1
출력예제1]
1
입력예제2]
2
출력예제2]
2
입력예제3]
5
출력예제3]
4
참고풀이]
package e_Testing;
import java.util.*;
public class e_2021_01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int N;
int Ans;
Scanner Insu=new Scanner(System.in);
//임의의 수 1~100사이의 정수를 입력받는다.
N=Insu.nextInt();
Ans=1;
if(N>=1 && N<=100)
{
while(N>1)
{
N>>=1;
//마지막 남는 수는 1,2,4,8,16,32,64 등으로 2^n승 값들이다.
Ans<<=1;
}
//결과출력
System.out.println(Ans);
}
}
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 여름
'프로그램 > Java 1000제' 카테고리의 다른 글
Java 6제] 1~10까지 출력하기(private 객체변수 사용) (0) | 2022.11.07 |
---|---|
Java 5제] 1~10까지 출력하기(public 객체변수 사용) (0) | 2022.11.07 |
Java 4제] 1~10까지 출력하기(반복문 사용) (0) | 2022.11.07 |
Java 2제] 2019년 한국정보올림피아드 1차대회 초등부 2번 - 회문 (0) | 2021.07.29 |
Java 1제] 2019년 한국정보올림피아드 1차대회 초등부 1번 - 막대기 (0) | 2021.07.09 |
댓글