전체 글 43

[백준] 2577번 - 숫자의 갯수 (JAVA)

세 개의 100~1,000 사이의 자연수를 입력받고 그 수들을 곱한 후, 결과값에 0~9까지 각각의 숫자가 몇 번씩 쓰였는지 알아내는 문제이다. 예를 들어 A = 150, B = 266, C = 427 이라면 A × B × C = 150 × 266 × 427 = 17037300 이 되고, 계산한 결과 17037300 에는 0이 3번, 1이 1번, 3이 2번, 7이 2번 쓰였다. 먼저 0~9까지의 갯수를 각각 저장할 길이 10의 배열을 생성한다. 그리고 3개의 정수를 입력받아 곱한 후, 숫자의 개별적 비교를 위해 String.valueOf() 메소드를 이용하여 문자열 형식으로 변환한다. 문자열형식으로 변환된 결과값 str의 길이만큼 반복문을 수행하여 0번글자부터 charAt(인덱스)-'0' 함수를 이용하여..

[백준] 10818번 - 최소, 최대 (JAVA)

배열의 크기와 값을 각각 입력받은 다음, 해당 배열의 최솟값과 최댓값을 출력하는 문제이다. 임시 temp변수와 반복문을 사용하여 입력받은 배열값들의 최솟값과 최댓값을 구할 수도 있지만, 나는 배열을 정렬하는 Arrays.sort() 메소드를 이용하여 입력받은 값을 오름차순으로 정렬하여 첫값이 최솟값, 마지막값이 최댓값이 되도록 하였다. Today's Comment 다 풀고나서 제출버튼을 눌렀는데 채점이 너무오래걸려서 시간초과뜰까봐 당황했는데 정답처리로 뜨길래 신기했다! 다른 사람들에 비해 너무 오래걸렸을까봐 다른사람들 제출시간도 봤는데, 내가 그나마 빠르고 메모리도 적게쓴 편인 것 같아서 더 신기했던 경험... 별로 긴 코드도 아니고 아주 새로운 메소드같은걸 쓴것도 아니라서 왜 이 문제만 이렇게 메모리랑..

[백준] 1110번 - 더하기 사이클 (JAVA)

0~99 사이의 정수가 주어졌을 때 먼저 주어진 수가 10보다 작다면 앞에 0을 붙여 두 자리 수로 만들고, 각 자리의 숫자를 더한다. 그 다음, 주어진 수의 가장 오른쪽 자리 수와 앞에서 구한 합의 가장 오른쪽 자리 수를 이어 붙여 새로운 수를 만든다. 결과적으로 새로운 수가 가장 처음 입력받은 수와 동일해질때까지 해당 과정을 반복할 때, 몇 번을 반복해야 하는지를 구하는 문제이다. 예를 들어 26이라는 정수가 주어졌을 때 2+6 = 8이며, 새로운 수는 68이다. 68을 이용하여 계산하면 6+8 = 14이므로 새로운 수는 84이다 위와 같은 과정을 반복한다면 4번만에 원래 수로 돌아올 수 있기 때문에 26의 사이클의 길이는 4이다. 최초로 입력받은 수 n을 이용하여 새로운 수를 계속 만들어내야 하므로..

[백준] 10951번 - A+B (JAVA)

이 문제는 10952번 덧셈문제와 거의 동일하지만, 입력이 종료되었다는 의미로 특정 입력값을 설정하는 것이 아니라 값이 더이상 없을때까지 덧셈을 계속한다는 차이점이 있다. 처음에 문제를 읽었을 때는 그 바로 전 문제와 차이점이 뭐지 싶었는데, 값이 더이상 없을때까지 입력받는다는 것이 조건이라는 것을 몰라서 몇번을 틀렸었다... 그리고 NullPointerException을 계속 볼 수 있다... 이 문제에서 주의해야 할 것은 readLine()을 통해 입력받은 값은 String형이며, 값이 입력되지 않은 경우에는 null값이 들어온다는 점이다. 그렇기 때문에 while문 안의 조건에 readLine()을 통해 입력받은 값이 null인지 여부를 조건으로 설정하여, null이 아닌 경우에만 반복문이 수행되도..

[백준] 2884번 - 알람 시계 (JAVA)

24시간으로 표현되는 시간 값에서 45분을 앞당겼을 때의 시간을 구하는 문제이다. 시간은 "H M" 과 같이 두 숫자를 띄어쓰기로 구분된 한 줄로 입력받으며, 해당 숫자에서 45분을 앞당긴 숫자를 출력해야 한다. 만약 M이 45보다 크다면 H의 변동 없이 M-45계산만 적용한 후 시간을 출력하면 되지만, M이 45보다 작다면 H-1 계산을 하고 45분 더 앞당긴 값을 계산하여 M값을 출력해야 한다. M이 45보다 작은 경우 45-M을 하고 난 후 나머지 값을 60분에서 빼야 하므로, 위와 같이 나머지 값의 절댓값을 저장하는 gab변수를 설정하여 사용하였다. 그러나 만약 H가 0이라면 H-1계산을 하였을 때 -1시가 되므로, 이 경우에만 별도의 조건문을 통해 -1이 아닌 23이 출력되도록 처리해준다. 마지..

[프로그래머스] 1단계 - k번째 수 (JAVA)

여러 개의 숫자가 저장되어있는 배열에서 특정 위치의 값들만을 추출하여 오름차순으로 정렬한 후, 그 중 k번째 수를 추출하는 문제이다. 조건에서 사용되는 commands는 2차원배열이지만 배열 내부의 배열의 길이는 3으로 고정되어있기 때문에, 내부 배열을 위한 별도의 for문을 추가로 사용할 필요는 없다. 반복문을 사용해서 해결하는 문제이며, 배열을 정렬하는 Arrays.sort() 메소드와 배열 내부 특정 위치의 값들을 추출할 때 쓸 수 있는 Arrays.copyOfRange() 메소드를 사용하였다. ※ 정렬 메소드의 경우 Arrays.sort(배열) 의 형식으로 사용하면 자동으로 오름차순 정렬을 할 수 있다. 오름차순으로 정렬하면 숫자의 경우 작은 숫자~큰 숫자 순으로 정렬되고, 문자열의 경우 알파벳순..

[프로그래머스] 1단계 - 음양더하기 (JAVA)

랜덤으로 주어지는 최대 1,000개의 정수에서 절댓값과 양수/음수 여부를 분리하여 각각의 배열에 넣어놓은 상황을 가정한 문제이다. int형 배열인 absolutes에는 정수의 절댓값만이, boolean형 배열인 signs에는 정수의 양수/음수의 값이 각각 true/false 의 값으로 저장되어있다. absolutes배열과 boolean배열은 짝을 이루고 있으며, 두 배열의 길이는 동일하다. 예를 들어, absolutes[4]에 해당하는 절댓값의 기호는 signs[4]에 저장되어있다는 뜻이다. 간단한 배열과 반복문을 이용하는 문제이며, 두 번째 소스와 같이 for문 안의 if~else문을 3항 연산자를 이용하여 한 줄로 줄여 쓸 수도 있다.

[백준] 2588번 - 곱셈 (JAVA)

해당 문제는 세자리 수의 곱셈에서 중간 과정의 숫자를 구하는 문제이다. 해당 그림에서 (1)번 숫자와 (2)번 숫자를 입력한다면, (3) ~ (6)을 출력하는 문제이다. 문제를 자세히 보면 (1) x (2)의 1의자리 수, (1) x (2)의 10의 자리 수, (1) x (2)의 100의 자리 수, (1) x (2) 를 차례로 출력하는 것임을 알 수 있다. 먼저 BufferedReader를 생성하여 콘솔창을 통해 두 개의 (1)과 (2)의 값을 입력받을 수 있도록 한다. (1)의 숫자는 따로 처리가 필요하지 않으므로 곧바로 계산식에 사용할 수 있도록 int형으로 형변환하여 num1변수에 담아주었다. 그러나 (2)의 숫자는 split() 함수를 통해 각각 자릿수 별로 분리하기 위해 String형 그대로 n..

[백준] 10998번 - A*B (JAVA)

이번 문제 역시 1000번 덧셈 문제와 1001번 뺄셈 문제와 동일한 유형의 사칙연산 문제이다. 1000번 문제는 Scanner를 이용해서 풀어보았고, 1001번 문제는 BufferedReader와 StringTokenizer를 이용해서 풀었다. 그리고 이번 10998번 곱셈문제는 BufferedReader와 split() 함수를 이용해서 풀어보았다. ( 지난 풀이들 참고 ) [백준] 1단계 1000번 - A+B (JAVA) 이번 문제는 두 개의 숫자를 입력받아 그 합을 출력하는 문제이다. 내가 기억하기로는 값을 입력받는 방법에 여러가지가 있었던 것 같은데 레퍼런스 없이 바로 적으려니 기억나는 것이 Scanner밖 zzzin.tistory.com [백준] 1단계 1001번 - A-B (JAVA) 이번 문..

[백준] 1001번 - A-B (JAVA) / 1008번 - A/B (JAVA)

이번 문제는 저번 문제와 같이 두 숫자 값을 입력받아 계산값을 내는 동일 유형의 문제인데, 저번 포스팅에서는 간단하게 Scanner를 이용해서 풀어봤지만 이번에는 저번에 참고하겠다고 첨부했던 포스팅을 보고 BufferedReader와 StringTokenizer를 이용해서 풀어봤다. [백준] 1단계 1000번 - A+B (JAVA) 이번 문제는 두 개의 숫자를 입력받아 그 합을 출력하는 문제이다. 내가 기억하기로는 값을 입력받는 방법에 여러가지가 있었던 것 같은데 레퍼런스 없이 바로 적으려니 기억나는 것이 Scanner밖 zzzin.tistory.com 이번 문제에서 쓴 BufferedReader 역시 Scanner와 동일하게 콘솔창에서 키보드를 통해 값을 입력받아 처리하는 것이므로 System.in 사..