백준알고리즘 #10250 ACM호텔 java 문제를 해결하기 위해 먼저 h,w,n값을 입력 받으면 이 n번째 손님이 몇 호실에 배정되는지에 대한 함수를 만든다. 주어진 문제에서 손님은 가장 적게 이동하는것을 원한다고 하므로 사실 w는 필요가 없다. count를 1로 준 이유는 각 방 호실이 101호 201호 처럼 1부터 시작하고 100호는 없기 때문. 완성한 코드는 위와 같다. 조금 더 간단하게 만들 수도 있지만 생각나는대로 코딩하다보니 좀 길어졌다. Java/백준알고리즘 2020.02.21
백준알고리즘 #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) 값을 넣는다. (이때 .. Java/백준알고리즘 2020.02.17
백준알고리즘 #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부터 시작한 이유는 처음 방과 목적지 방을 포함해야 하기 때문. Java/백준알고리즘 2020.02.17
백준알고리즘 #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문을 작성하면 완성. Java/백준알고리즘 2020.02.16
백준알고리즘 #1712 손익분기점 java 처음에 문제를 보았을 때, 간단하게 while 문을 사용하여 a+(b*count) 값이 c*count 보다 작아지는 지점을 구하면 될 거라 생각하여 while문을 이용하여 코드를 짰다. 하지만 결과는 실패. 어떤 값을 넣어보아도 정확한 값이 출력되는데 왜 실패라고 나오는 걸까? 이유는 시간 제한 때문. 따라서 코드를 다음과 같이 수정했다. b와 c는 가변 비용이므로 고정 비용인 a만 해결하면 손익분기점을 넘길 수 있다. a / (c-b) 와 같은 수식을 이용하면 이익을 남기지 않는 최대 판매 대수를 구할 수 있으므로, count+1을 출력 결과는 성공. Java/백준알고리즘 2020.02.16
백준알고리즘 #4673 셀프 넘버 java (단계별로 풀어보기) 먼저 test 라는 함수를 만든 후 입력받은 숫자 n으로 d(n)을 만드는 알고리즘을 짠다. 그런다음 a배열을 생성해 1 ~ 10000까지의 수를 이 함수에 대입하여 본다. 각 숫자들의 d(n)은 result 변수에 담고, result 변수에 담긴 수가 10000 이하라면 a[] 배열의 result 번째 숫자가 1이 되도록 한다. a[result] 의 결과가 1이라면 a배열의 result 번째 수는 생성자가 있는 숫자가 되고 a[result] 의 결과가 0이라면 a배열의 result 번째 수는 생성자가 없는 셀프 넘버가 된다. 따라서 이 a 배열에서 값이 0인 모든 배열 넘버를 출력하면 각 배열 넘버가 셀프 넘버가 된다. Java/백준알고리즘 2020.02.11