일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 아스키코드
- 빅데이터
- 다리 만들기
- 완전탐색
- 구현
- 탐색
- DP
- 백준
- 다이나믹프로그래밍
- LIS
- 그리디
- 스택
- 배열
- 브루트포스
- 새벽코딩
- Queue
- BFS
- Python
- 프로그래머스
- Java
- 문자열
- HashMap
- BufferedReader
- 백트래킹
- Stack
- 시뮬레이션
- SQL
- dfs
- 알고리즘
- oracle
- Today
- Total
새벽코딩
[백준] [1475] 방 번호 (구현) 본문
https://www.acmicpc.net/problem/1475
1475번: 방 번호
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
www.acmicpc.net
문제
다솜이는 은진이의 옆집에 새로 이사왔다. 다솜이는 자기 방 번호를 예쁜 플라스틱 숫자로 문에 붙이려고 한다.
다솜이의 옆집에서는 플라스틱 숫자를 한 세트로 판다. 한 세트에는 0번부터 9번까지 숫자가 하나씩 들어있다. 다솜이의 방 번호가 주어졌을 때, 필요한 세트의 개수의 최솟값을 출력하시오. (6은 9를 뒤집어서 이용할 수 있고, 9는 6을 뒤집어서 이용할 수 있다.)
입력
첫째 줄에 다솜이의 방 번호 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.
출력
첫째 줄에 필요한 세트의 개수를 출력한다.
예제 입력 1 복사
9999
예제 출력 1 복사
2
예제 입력 2 복사
122
예제 출력 2 복사
2
예제 입력 3 복사
12635
예제 출력 3 복사
1
예제 입력 4 복사
888888
예제 출력 4 복사
6
※ JAVA 코드 (방 번호)
import java.io.*;
import java.util.*;
public class Main {
static int [] arr;
// 0~9까지 수를 담을 배열을 채운다
public static void makeArr(String str) {
for(int i = 0; i < str.length(); i++) {
// 문자열의 각 인덱스 숫자
int idx = (int) str.charAt(i) - '0';
// 배열의 해당 인덱스 증가
arr[idx]++;
}
}
// 0~9까지 수 중 가장 많은 수를 구한다
public static int maxNum() {
int result = -1;
int tmpNum = 0;
for(int i = 0; i < arr.length; i++) {
if(i == 6 || i == 9) {
tmpNum += arr[i];
} else {
result = Math.max(arr[i], result);
}
}
// 6+9가 짝수면(나머지가 0이면) 그대로, 홀수면(나머지가 1이면) 1을 더해준다
tmpNum = tmpNum/2 + tmpNum%2;
result = Math.max(tmpNum, result);
return result;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 0~9 까지 담을 배열
arr = new int[10];
// 입력 값
String N = br.readLine();
// 배열에 0~9까지 담기위한 메서드
makeArr(N);
int maxVal = maxNum();
// 출력
System.out.println(maxVal);
}
}
※ 생각정리 (방 번호)
방 번호문제는 단순 구현문제로 재미있다. 여러 방법으로 풀 수 있겠지만 0~9까지 숫자로 제한이 걸려있으니 각 숫자를 배열에 담아서 풀기로 하였다.
arr배열의 크기를 10으로 만들어 0~9까지 수를 담을 수 있는 공간을 만들고 문자열을 읽어 각 문자별로 해당 인덱스를 증가해 주었다.
이제 각 인덱스 중 가장 큰(개수가 많은) 수를 구하면 됬지만, 6과 9를 고려해야한다.
6, 9는 중복으로 사용할 수 있기 때문에 해당 숫자들은 따로 변수에 담아두고, 둘의 합이 짝수일 경우는 2로 나눈 몫을 홀수인경우에는 2로나눈 몫에 1을 더해서 변수에 담아두었다.
마지막으로, 해당 수중 최대값을 함수에서 뽑아 출력해주었다.
-새벽코딩-
'알고리즘' 카테고리의 다른 글
[백준] [2231] 분해합 (브루트포스) (JAVA) (0) | 2022.12.29 |
---|---|
[백준] [4963] 섬의 개수 (BFS) (2) | 2022.12.28 |
[프로그래머스] 크기가 작은 부분문자열 (구현) (2) | 2022.12.27 |
[백준] [12852] 1로 만들기 2 (dp) (0) | 2022.12.26 |
[백준] [10708] 크리스마스 파티 (0) | 2022.12.25 |