-
[백준/BOJ] 1094번 : 막대기 (JAVA / 자바)백준 2022. 2. 20. 16:44
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/1094
- 문제 -
난이도 실버 5 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
풀이 방법
64길이의 막대기로 만들수 있는 막대 조각은 {64, 32, 16, 8, 4, 2, 1}이다. 이 막대들로 원하는 막대를 만들면 된다.
배열에 저 값들을 다 넣고, 64부터 1까지 원하는 막대기 길이가 될때까지 더하고 빼준다.
내가 원하는 값이 23이면 23 밑부터 보면 된다. 16을 더해서 23 밑이면 다음 값을 더해준다. 16+ 8 = 24. 24는 원하는 길이보다 길다. 그렇다면 다시 8을 빼주고, 다음 값을 더한다. 24 - 8 + 4 = 20이다. 원하는 값보다 짧다. 다음 값을 더한다. 20 + 2 = 22. 아직도 짧다 다음 값을 더한다. 22 + 1 = 23. 같아졌다. 그렇다면 여기까지 쓰인 막대기 개수를 구한다. 더했다 뺀거는 세지 않고 쓰인것만 세주면 4가 된다. 개수를 출력해주자.
코드를 보자.
-풀이-
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int X = Integer.parseInt(br.readLine()); int count = 0; //막대기 int[] arr = {64, 32, 16, 8, 4, 2, 1}; int sum = 0; //막대기는 총 7개이니 7번 반복하는 반복문 for(int i = 0; i < 7; i++) { //원하는 값보다 작은 값들로만 연산한다. if(arr[i] <= X) { sum += arr[i]; count++; } //더했는데 원하는 값보다 길면 빼준다. 뺐기때문에 개수에서도 빼준다. if(sum > X) { sum -= arr[i]; count--; } //같아지면 반복문을 종료하고 개수를 출력한다. if(sum == X) break; } System.out.println(count); } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 1181번 : 단어 정렬 (JAVA / 자바) (2) 2022.02.20 [백준/BOJ] 1158번 : 요세푸스 문제 (JAVA / 자바) (0) 2022.02.20 [백준/BOJ] 1524번 : 세준세비 (JAVA / 자바) (0) 2022.02.20 [백준/BOJ] 1418번 : K-세준수 (JAVA / 자바) (0) 2022.02.20 [백준/BOJ] 1402번 : 아무래도이문제는A번난이도인것같다(JAVA / 자바) (0) 2022.02.19