백준7 [백준] 11399번: ATM - JAVA(자바) / 그리디 알고리즘 위의 문제도 그리디 알고리즘을 이용한 문제인데 매우 쉬운 문제이다. 시간의 합을 최소로 만들기 위해서는 입력받은 배열을 오름차순 정렬 후 새로운 배열을 만들어 줘야 하는데 배열 arr의 0번째의 다음인 arr[1]번째부터 arr[N]까지 현재 원소 + 이전 원소 합의 배열을 만들어 준다. 그 후 합을 구하는 for문을 이용하여 답을 구해준다. import java.util.Arrays; import java.util.Scanner; public class b11399 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); int arr[] = new int[N]; int sum=.. 2022. 12. 6. [백준] 10610번: 30 - JAVA(자바) / 그리디 알고리즘 30배수의 조건부터 알아보자면 1. 마지막 자리수는 '0'이여야 한다. 2. 각 자리수 합이 3의 배수이다. 조건에 맞게 30의 배수중 주어진 수를 섞어 가장 큰 수를 만들어야 한다. list를 활용하여 문자열을 하나씩 받아와서 list에 추가해 주었고 0이 있는지를 확인하기 위하여 list를 오름차순으로 순서를 지정하였다. 그 후 if 문을 이용해 0을 검사, 각 자리수 합이 3의 배수인지를 검사한다. 그리고 for문을 이용하여 끝자리부터 출력(다시 내림차순)한다. if문의 조건을 만족하지못하면 -1출력 import java.util.*; public class b10610 { public static void main(String[] args ) { Scanner in = new Scanner(Sys.. 2022. 11. 30. [백준] 11047번: 동전 0 - JAVA(자바) / 그리디 알고리즘 본 문제는 그리디 알고리즘을 이용한 문제이다. 그리디 알고리즘을 간단히 설명하자면 greedy(탐욕)알고리즘이고 매 번의 선택에서 가장 좋아보이는 선택을 하여 적절한 답을 찾아 가는 것이다. 장점으로는 근사해를 구하는 속도가 매우 빠르다는 장점이 있다. 동전 개수가 최솟값이 되는 경우를 만족하려면 주어진 K의 값에 대하여 동전의 가장 큰 가치 순으로 나누어 보아야 한다. for문을 이용하여 큰 가치부터 K를 나누어야 한다. 그리고 동전의 가치가 K보다는 작아야 하므로 큰 경우는 제외시키도록 한다. 제외 시키고 난 후 가장 큰 가치로 나누어서 몫만큼 동전의 갯수를 나타내는 변수 count를 올려준다. for문안에서 나누고 난 나머지를 K값으로 바꾸어 주고 for문이 실행되면서 k가 0이 되면 for문이 종.. 2022. 11. 29. [백준] 2563번: 색종이- JAVA(자바) 9단계 2차원배열 문제중 가장 난이도 있는 문제였지만 쉽게 풀 수 있다. 코드를 보기전에 앞서 설명을 하자면 입력받은 위치에 따라 첫번째 입력을 행(가로), 두번째 입력을 열(세로)로 받아온다고 생각해보자. 도화지의 크기는 100 X 100이고 색종이의 크기는 10 X 10으로 고정적이다. 색종이의 크기가 주어졌기때문에 첫번째 색종이의 위치로 3,7을 입력받는다면 첫번째 색종이의 실제 범위는 가로 3 ~ 13, 세로 7 ~ 17의 영역을 도화지 중에서 차지하게 된다. 입력 받은 영역들의 값을 배열에 넣어 바꿔주고 그 바뀐 값들이 몇개인지 배열 전체에 for문을 돌려 구하면 되는 문제이다. 색종이 행(가로) 열(세로) 입력받은 위치(실제 범위) 3 (3 ~ 13) 7 (7 ~ 17) 15 (15 ~ 25).. 2022. 11. 18. [백준] 1546번: 평균 - JAVA(자바) 문제 풀이 보기보다 간단한 문제이다. for문은 총 3번 사용하였고 풀이로 배열을 두가지를 선언하였는데 arr[]이 입력받은 시험점수의 배열이고 arr2[]는 입력받은 점수들을 점수/M*100을 한 점수들의 배열이다. 소수자리까지의 연산이 필요하기 때문에 자료형은 double을 사용하였다. maxScore는 입력받은 성적의 최고점수인데 for문을 이용하여 Math.max함수를 써서 arr[]의 점수들중 최고 점수를 maxScore에 담았다. 최고점수가 Math.max함수를 통해 구해졌기때문에 for문을 통한 연산으로 arr2[]에 들어갈 점수들을 구할 수 있게 된다. 3번째 for문으로는 바뀐 성적의 점수들의 합을 구하도록 만들었다. 출력문으로 모든 점수들의합(sum) / 과목수(N) 를 통해 평균을 구.. 2022. 11. 1. [백준] 1110번: 더하기 사이클 - JAVA(자바) 주어진 수 : N 왼쪽 수 : left 오른쪽 수 : right 연산을 통해 바뀌는 변수 : temp 사이클 길이 : count 주어진 수의 왼쪽 자리수(left)는 주어진 수 / 10 주어진 수의 오른쪽 자리수(right)는 주어진 수 % 10 temp는 연산을 통해 계속 바뀌게 된다. temp는 오른쪽 수 + 왼쪽과오른쪽 수의 합의 오른쪽 자리수로 구할 수 있다. 즉 temp = right * 10 + (left + right) % 10 이 된다. 위의 연산을 while문을통해 반복하면서 반복할때마다 count를 하나씩 ++한후 if문을 사용하여 temp와 N이 같아지면 while문을 종료시키고 count를 출력하면 된다. while문을 사용하여 구현해보면 다음과 같다. public class b11.. 2022. 10. 31. [백준] 2525번: 오븐시계 -JAVA(자바) Car프로젝트를 만들면서 백준 코딩 문제도 틈틈히 풀어보려고 한다. 현재 Car프로젝트는 frontend 디자인을 구현하는중.. 백준의 기본적인 문제들부터 차근차근 풀어볼 것이다. 백준 문제는 단계별 문제를 1단계부터 모두 풀어보려고 하는데 포스팅은 풀면서 이해가 어려운 문제들 위주로 하려고 한다. https://www.acmicpc.net/problem/2525 2525번: 오븐 시계 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.) www.acmicpc.net 풀이 복잡해 보이지만 풀어보면 생각보다 간단하였다. 시간 : A 분 : B 요리 시간 .. 2022. 10. 19. 이전 1 다음