백준 19

1일 1백준 : 2839번 설탕 배달

1일 1백준 7일차, 오늘 푼 문제는 2839번 문제인 "설탕 배달"이다. https://www.acmicpc.net/problem/2839 2839번: 설탕 배달 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그 www.acmicpc.net 겉보기에는 아주아주 쉬웠던 문제. 나머지 연산자와 몫 연산자만 가지고 1분컷 낼 수 있을 줄 알았지만 어림도 없었다. 결국 for문을 선택했다. 3키로 봉지와 5키로 봉지로 N킬로그램을 만든다는 게 무슨 의미일까? 3의 배수의 합과 5의 배수의 합으로 N을 만든다는 뜻이다. 즉 중첩 for문을 통해 3의 배수와 5의 배수를 더하고, ..

1일 1백준 2022.06.19

1일 1백준 : 10757 큰 수 A + B

1일 1백준 6일차, 오늘 푼 문제는 10757번 문제인 "큰 수 A + B"이다. https://www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 원래 "단계별로 풀어보기"의 문제 순서를 따르던 중이었는데, 앞의 두 문제가 꽤 어려워 시험기간인 지금 너무 많은 투자는 힘들겠다고 판단, 비교적 쉬워보였던 이 문제를 풀게 되었다. 이 문제는 해결책을 구상하기가 매우 아주 굉장히 정말 엄청 간단하다. 하지만 배열을 다루는 만큼 인덱싱에 신경을 써야한다. 그리고 자리 올림이 발생하는 경우와 아닌 경우에 처리 방식이 다르다는 점도 유의할 필요가 있다. 아래로 내리면 정답 코드..

1일 1백준 2022.06.18

1일 1백준 : 10250번 ACM호텔

1일 1백준 5일차, 오늘 푼 문제는 10250번 문제인 "ACM 호텔"이다. https://www.acmicpc.net/problem/10250 10250번: ACM 호텔 프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수 www.acmicpc.net 이 문제는 문제를 제대로 이해한다면 그냥 나눗셈만으로 풀 수 있다는 걸 쉽게 깨달을 수 있다. 다만 변수가 한 가지 있는데, n과 h가 맞아 떨어지는 경우이다. 이때에는 변수 처리에 조금 변주를 주어야 한다. 아래의 코드를 참고해보면 무슨 말인지 알 수 있을 것이다. 아래로 내리면 정답 코드가 나옵니다. 문..

1일 1백준 2022.06.17

1일 1백준 : 2869번 달팽이는 올라가고 싶다

1일 1백준 4일차, 오늘 푼 문제는 2869번 문제인 "달팽이는 올라가고 싶다"이다. https://www.acmicpc.net/problem/2869 이 문제는 직전의 두 문제에 비하면 아주아주 쉽다 하지만 어리석은 나는 이 문제를 처음엔 for문을 이용해서 풀려고 했다 아직도 갈 길이 한참 남았다는 것을 되새기는 계기가 되었다 출력을 할 때 if문을 넣은 이유는 자바의 정수 나눗셈 처리 방식 떄문이다. 자바는 정수를 나눌 때 나누어떨어지지 않으면 반올림을 하는 것이 아니라 전부 버려버린다 그래서 나누어 떨어지지 않는 경우에는 1을 더해주었다.((n+1)+1) 버퍼스트림을 써야하는 것도 이 문제의 특징 중 하나이다 꽤나 귀찮기는 하지만, 성능 차이가 워낙 확실해서 알아두어야할 것 같기는 하다 아래로 ..

1일 1백준 2022.06.16

1일 1백준 : 1193번 분수찾기

1일 1백준 3일차, 오늘 푼 문제는193번 문제인 "분수찾기"이다. https://www.acmicpc.net/problem/1193 1193번: 분수찾기 첫째 줄에 X(1 ≤ X ≤ 10,000,000)가 주어진다. www.acmicpc.net 알고리즘 문제 풀이에 대한 경험이 거의 없는 내게는 문제가 처음 준 압도감은 엄청났다. 도대체 이걸 어떻게 풀 수 있지 고민하던 순간 규칙이 보이기 시작했고 순조롭게 해결할 수 있었다. 나는 특이하게 이 문제에서 배열을 사용했는데, 백준을 통과하는 데에는 배열이 굳이 필요하지 않지만 for문을 통해 여러번 n번째 함수를 찾는 상황에는 배열을 사용하는 것이 좋을 것이라고 판단해 조금 더 앞서가봤다. func함수를 보면 num == 1일 때 "1/1"을 출력하게 ..

1일 1백준 2022.06.16

1일 1백준 : 2292번 벌집

1일 1백준 2일차, 오늘 푼 문제는 2922번 문제인 "벌집"이다. https://www.acmicpc.net/problem/2292 2292번: 벌집 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌 www.acmicpc.net 문제를 처음 봤을 때는 엄청나보이는 난이도에 많은 당황을 했다. 그러나 계차수열을 이용하면 된다는 것을 깨달았다. 계차수열을 반환해주는 함수를 하나 만들어서 사용하였다. 아래로 내리면 정답 코드가 나옵니다. 문제를 아직 풀지 않으신 분들은 주의해주세요. import java.util.Scanner; public class pro1712 ..

1일 1백준 2022.06.14

1일 1백준 : 1712번 손익분기점

1일 1백준 2일차, 오늘 푼 문제는 1712번 문제인 "손익분기점"이다. https://www.acmicpc.net/problem/1712 1712번: 손익분기점 월드전자는 노트북을 제조하고 판매하는 회사이다. 노트북 판매 대수에 상관없이 매년 임대료, 재산세, 보험료, 급여 등 A만원의 고정 비용이 들며, 한 대의 노트북을 생산하는 데에는 재료비와 www.acmicpc.net 처음엔 for문을 돌리면서 i의 값을 증가시키고 a + b*i < c*i와 같은 조건식을 만족시키면 그 i의 값을 출력시키는 방식을 사용했다. 하지만 이 문제의 시간 제한을 만족시키지 못했고, 이내 내가 얼마나 비효율적인 알고리즘을 채택했는지 깨달았다. 그냥 a/(c-b)+1의 값을 출력하면 반복문 자체가 필요하지 않은 문제였기..

1일 1백준 2022.06.14

1일 1백준 : 1316번 그룹 단어 체커

1일 1백준 2일차, 오늘 푼 문제는 1316번 문제인 "그룹 단어 체커"이다. https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 처음엔 배열을 이용해서 그동안 문자열에서 한 번도 등장하지 않은 char는 배열에 추가하고 이미 배열에 있는 char를 다시 추가하려고 하면 return false를 하려고 했으나 String의 contains 메서드를 이용하면 훨씬 간단하게 해결할 수 있다는 것을 깨닫고 문자열을 이용..

1일 1백준 2022.06.14

(정말 오랜만에) 1일 1백준 : 2941번 크로아티아 알파벳

1일 1백준 1일차(너무 오랜만이니 리셋하기로 했다), 오늘 푼 문제는 2941번 문제인 "크로아티아 알파벳"이다. https://www.acmicpc.net/problem/2941 2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 이 문제는 내가 1일 1백준을 내려놓게 만든, 내게는 굉장한 의미가 있는 문제이다. 여러가지 코드를 짜봤음에도 인덱스 초과 오류를 벗어나지를 못해서 결국 다른 사람들의 답을 본 첫 번째 문제가 되었다. 이런 문제 따위에 굴복하고 만 것이 상당히 ..

1일 1백준 2022.06.13

1일 1백준 : 10일차 5622번 다이얼

1일 1백준 10일차, 오늘 푼 문제는 5622번 문제인 "다이얼"이다. https://www.acmicpc.net/problem/5622 쉽게 해결했다 bigger함수의 sum +=에 n+1과 같이 우변을 한 이유는, 다이얼 2부터 알파벳이 할당되어있기 때문이다 아래로 내리면 정답 코드가 나옵니다. 문제를 아직 풀지 않으신 분들은 주의해주세요. import java.util.Scanner; import java.util.Arrays; class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); Func f = new Func(); String inputWord = sc.nextLine(); System...

1일 1백준 2022.05.02