목록백준 문제풀이 (6)
소소한 개발이야기
📄 배열 합치기 [백준 11728번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제는 정렬을 이용해 해결하였습니다. 문제가 쉬운 관계로 간단하게 설명 드리겠습니다. 먼저 문제의 조건을 보면 주어지는 두 배열을 합친 뒤 정렬하여 출력하라. 입니다. 즉, 주어지는 두 배열을 합친 길이 만큼의 새로운 배열을 생성 한 뒤 두 배열의 값을 모두 넣습니다. 이 후 Arrays.sort()를 이용해 정렬 한 뒤 출력하면 문제를 해결할 수 있습니다. 글보단 코드를 보면 더 이해하기 쉽습니다. 🌱 main 함수 public static void main(String[] args) throws IOException { String[] input = br.readLine().split(" "); int sizeA = ..
📄 셀프 넘버 [백준 4673번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 해설 문제는 에라토스테네스의 체의 개념을 활용하여 문제를 해결하였습니다. 먼저 문제의 조건을 살펴보며 해결방법을 알아보겠습니다. 문제 조건 d(n) = n + n의 각 자리수 n은 d(n)의 생성자라고 한다. n을 시작으로 d(n), d(d(n)), ... 과 같은 무한 수열을 만들 수 있다. 생성자가 없는 수는 셀프 넘버라고 한다. 10000이하의 모든 셀프 넘버를 찾아라. 문제를 풀기 위해선 d(n)을 이해해야 합니다. d(n)은 문제에서 제시된 것과 같이 d(n) = n + n의 각 자리수 입니다. 그렇다면 여기서 생각해봐야 할 점은 n으로 인해 d(n)이 만들어 집니다. 또한 d(n)은 n보다 무조건 커지게 됩니..
📄 캥거루 세마리 [백준 2965번] 🔗 [전체 소스 코드] 🔗 [문제 풀러 가기] 문제 해설 문제는 단순 상황 파악만으로 해결할 수 있습니다. 먼저 문제의 조건을 살펴보며 해결방법을 알아보겠습니다. 문제 조건 캥거루 세마리는 일직선 상에 서로 다른 좌표위에 있다. 한 번 움직일 때 바깥쪽에 있는 두 캥거루 중 한마리가 다른 캥거루 사이의 정수 좌표로 점프한다. 한 좌표 위에 캥거루가 두 마리 이상일 수는 없다. 위의 조건을 살펴보면 바깥쪽 두 캥거루 중 한마리가 다른 캥거루 사이의 정수 좌표로 점프한다고 하였습니다. 여기서 정수 좌표는 중앙이라고 표시되어 있지 않기 때문에 어떤 좌표로든지 이동할 수 있습니다. 이 점을 힌트로 삼으면 매번 바깥쪽 캥거루 중 이동시킬 한 마리를 정하지 않아도 됩니다. 이유..
💡 [BOJ #11945번 JAVA] (뜨거운 붕어빵) 문제 풀이 🔗 [소스 코드] 단순 swap 문제 입니다. 붕어빵 모양이 2차원 배열로 주어지는데 각 행을 역순으로 바꿔주기만 하면 되는 문제 입니다. 문자열 역순으로 출력 등의 문제와 같은 문제라고 볼 수 있습니다. 여기서 확인해야 할 점은 각 행을 역순으로 바꿀 때 모든 index를 확인하는 것이 아닌 열(col)의 1/2만 확인하며 역순으로 변경할 수 있다는 점 입니다. 🌱 붕어빵의 모양을 입력받는 함수 public static void inputShapeOfBoong(int[][] shapeOfBoong, int n, int m) throws IOException{ for (int i = 0; i < n; i++) { String inputMa..
[백준 온라인 저지] #2884번 (알람 시계) 문제풀이 45분 전으로 시간을 맞춰야하는 문제. 45분 전으로 되돌렸을 때 `minute`가 음수인지 아닌지만 확인한다면 쉽게 해결 할 수 있는 문제이다. 여기서 주의해야 할 점은 `hour`가 음수가 되는 경우만 확인해서 전 날인 `23시`로 바꿔주기만 하면 쉽게 해결할 수 있다. 소스코드 12345678if (minute - 45
[백준 온라인 저지] #10989번 (수 정렬하기 ) 문제풀이 문제만 보면 너무 쉽게 풀 수 있는 정렬문제이다. 하지만 여기서도 함정이 존재하게 되는데 그 함정에 대해서 한 번 살펴보자. 보기에는 쉬운 문제지만 입출력에 대해서 생각하지 않으면 풀 수 없는 문제이다. 일반적으로 접근하는 방법은 Scanner를 이용해서 입력을 받을 뒤 System.out.print()를 이용해 출력하는 방법이다. 하지만 이렇게 접근하는 순간 시간초과라는 메세지를 얻게 될 것이다. (나는 분명 맞게 풀었는데??) 처음에는 입력된 모든 수를 int[] arr에 저장 한 뒤 Arrays.sort()를 이용해서 정렬한 뒤 배열을 출력하는 형태로 접근했다. 하지만 시간초과에 걸린 것을 보고 주어지는 수가 10000보다 작거나 같다는..