반응형

공부 261

백준알고리즘 #2523 별 찍기 - 13 java

많이 접하게되는 별 찍기 문제이다. 규칙을 유추한 뒤 별을 찍어보자. 예제에서 3을 입력했을 때 별이 1,2,3,2,1 개 순으로 나온 걸 보아 n을 입력했을 때 1,2,3...n 개의 별을 차례로 찍고 다시 n-1,n-2....2,1 순으로 별이 찍히는 것을 알 수 있다. 약간 노가다(?)식으로 코드를 작성해보면 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int n = s.nextInt(); for (int i = 0; i < n; i++) { for (int j = 0; j 0; i--) { for (int j = 0; j <..

백준알고리즘 #5543 상근날드 java

3개의 버거와 2개의 음료 가격이 주어졌을 때, 가장 싼 세트 메뉴의 가격을 구하는 코드. 문제에서 버거와 음료를 하나씩 고른다고 했으므로 for문을 2개 이용하여 버거 값과 음료 값을 따로 입력받는다. 가장 싼 세트 메뉴의 가격을 구하는 프로그램이므로 각 for문 안에서 가장 싼 버거 값을 Hmin에, 가장 싼 음료값을 Bmin에 대입한다. 그 후에 set라는 변수를 만들어 앞서 구했던 Hmin과 Bmin값을 더한 후 50원을 빼면 끝. (set 변수를 만드는 대신 System.out.println(Hmin+Bmin-50); 코드를 사용해도 무방) import java.util.Scanner; public class Main { public static void main(String[] args) { ..

백준알고리즘 #10039 평균 점수 java

아주 간단한 문제. 학생 5명의 점수를 입력받아서 평균 점수를 출력하는 문제이다. for문을 이용해 각 학생들의 점수를 입력받는다. 다만 이때 점수가 40점 미만이라면 이 점수를 40점으로 고치도록 하자.(조건 참고) 그 후에 0으로 초기화 해놓은 sum 변수에 각 학생들의 점수를 더하고, 마지막으로 이 sum값을 5로 나눈 몫을 avg에 대입하면 끝. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); int sum = 0; int avg = 0; for (int i = 0; i < 5; i++) { int n = s.nextInt();..

백준알고리즘 #2581 소수 java

지난번 소수찾기 문제와 비슷한 문제이나 조건이 조금 추가되었다. M이상 N 이하의 소수를 찾고, 그 합과 최솟값을 출력하는 문제이다. 먼저 M과 N의 값을 입력받은 후, M부터 N까지 각각의 수를 소수인지 아닌지 판명하기 위해 for문을 2번 중첩시켜 사용하였다. 앞서 했던 소수찾기 문제처럼 div라는 변수를 추가해 1부터 차례대로 나누었을 때 나머지가 0이라면 div값을 증가시키는 방법으로 소수를 판별했고, div == 2 가 성립된다면 sum에 그 값을 차례대로 더하도록 하였다. 최솟값은 min이라는 변수에 입력받은 수 중 가장 큰 수인 N 값으로 초기화 한 다음, div==2를 만족하는 수 중에서 min보다 작은 값이라면 min에 대입하는 방식으로 찾았다. 아래 코드에 count변수는 마지막 조건인..

백준알고리즘 #10250 ACM호텔 java

문제를 해결하기 위해 먼저 h,w,n값을 입력 받으면 이 n번째 손님이 몇 호실에 배정되는지에 대한 함수를 만든다. 주어진 문제에서 손님은 가장 적게 이동하는것을 원한다고 하므로 사실 w는 필요가 없다. count를 1로 준 이유는 각 방 호실이 101호 201호 처럼 1부터 시작하고 100호는 없기 때문. 완성한 코드는 위와 같다. 조금 더 간단하게 만들 수도 있지만 생각나는대로 코딩하다보니 좀 길어졌다.

백준알고리즘 #1193 분수찾기 java

무한히 큰 배열에서 X번째 분수는 어떤 분수 인가 찾는 문제. 대각선으로 줄을 하나씩 그어보면 각 줄의 개수가 1,2,3... 으로 증가하는게 보인다. 먼저 이 X가 몇번째 줄에 있는지 알아보기 위해 sum이라는 변수를 만들고, X가 sum보다 작아질때까지 while 문을 돌린다. line이라는 변수는 while 문이 몇번 돌아갔는지 (몇 번째 줄인지) 확인하기 위해 생성. if (n > 1) 을 넣은 이유는 앞서 했던 벌집처럼 1이라면 무조건 1/1이 나오기때문에 제외하기 위해 넣었다. while문을 빠져나오면 line이라는 변수에 이 X가 몇번째 줄인지 알려주는 수가 담겨져 있다. 이제 이 줄에서 몇번째 순서에 있는지 확인하기 위해 count라는 변수에 n -(sum-line) 값을 넣는다. (이때 ..

백준알고리즘 #2292 벌집 java

이번 문제는 위 그림처럼 벌집이 구성될 때, 중앙의 방 1에서부터 주어지는 n번째 방 까지의 최단거리를 구하는 문제다. 먼저 각 숫자들의 규칙을 찾아보자. 벌집은 정육각형이므로 가장 중앙의 1을 둘러싸는건 6개의 방. 그 6개의 방을 둘러싸는 건 12개의 방, 그다음은 18... 이런 형식으로 1+6n씩 증가한다. 다시말해 1부터의 거리는 2~7은 2, 8~19는 3, 20~37은 4... 이러한 식으로 증가한다. 코드를 작성해보면 간단하다. n이 1인 경우만 제외하고, n에 6의 배수를 차례대로 빼서 그 값이 음수가 나올 때, 그 n이 몇번째 둘레에 있는지 알 수 있다. count를 1부터 시작한 이유는 처음 방과 목적지 방을 포함해야 하기 때문.

백준알고리즘 #2839 설탕배달 java

설탕을 정확하게 배달하는 문제. 처음에는 n을 공배수인 15로 나눈 후 각각의 나머지에 대해 계산하려했으나 너무 복잡해지는 바람에 포기. 그래서 while문을 이용에 처음 n에서 5로 나누어 질때까지 3을 빼는 식으로 코드를 작성해보았다. 사실 이 코드에서 a라는 변수도 사치고 n = n - 3으로 하면 더욱 깔끔하다. 조건에서 정확히 N킬로그램을 만들 수 없다면 -1을 출력하라는 조건이 있다. 그러므로 n에서 3을 차례대로 뺐을때, 이 값이 5로 나누어지지 않으면 결국 최종 n은 0보다 작아지게 된다. 따라서 최종 n이 0보다 작아진다면(ex 4, 7) -1을 출력하도록 if문을 작성하면 완성.

백준알고리즘 #1712 손익분기점 java

처음에 문제를 보았을 때, 간단하게 while 문을 사용하여 a+(b*count) 값이 c*count 보다 작아지는 지점을 구하면 될 거라 생각하여 while문을 이용하여 코드를 짰다. 하지만 결과는 실패. 어떤 값을 넣어보아도 정확한 값이 출력되는데 왜 실패라고 나오는 걸까? 이유는 시간 제한 때문. 따라서 코드를 다음과 같이 수정했다. b와 c는 가변 비용이므로 고정 비용인 a만 해결하면 손익분기점을 넘길 수 있다. a / (c-b) 와 같은 수식을 이용하면 이익을 남기지 않는 최대 판매 대수를 구할 수 있으므로, count+1을 출력 결과는 성공.

반응형