Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 모의해킹
- 백준
- 스파크
- 문제풀이
- 스프링
- 스프링부트
- SQL
- 프로그래머스
- 이클립스
- 위클리챌린지
- 필기
- c언어
- 리눅스마스터 2급 2차
- 문법
- 데이터프로그래밍
- 프로그래밍
- 빅데이터
- 알고리즘
- 자바
- MySQL
- 파이썬
- 코딩테스트
- 데이터베이스
- 엘라스틱서치
- 기초
- 토이프로젝트
- 해킹실습
- 오라클
- SQL 정리
- SQL 문법
Archives
- Today
- Total
개발일기
백준 20310번 풀이 : 타노스 (JAVA) 본문
반응형
문제 링크 : https://www.acmicpc.net/problem/20310
20310번: 타노스
어느 날, 타노스는 0과 1로 이루어진 문자열 $S$를 보았다. 신기하게도, $S$가 포함하는 0의 개수와 $S$가 포함하는 1의 개수는 모두 짝수라고 한다. 갑자기 심술이 난 타노스는 $S$를 구성하는 문자
www.acmicpc.net
❓ 문 제
어느 날, 타노스는 0과 1로 이루어진 문자열 S를 보았다. 신기하게도, S가 포함하는 0의 개수와 S가 포함하는 1의 개수는 모두 짝수라고 한다.
갑자기 심술이 난 타노스는 S를 구성하는 문자 중 절반의 0과 절반의 1을 제거하여 새로운 문자열 S′를 만들고자 한다. S′로 가능한 문자열 중 사전순으로 가장 빠른 것을 구하시오.
✏️ 입 력
문자열 S가 주어진다.
💻 출 력
S′로 가능한 문자열 중 사전순으로 가장 빠른 것을 출력한다.
❗️ 예 제
💡 문제 풀이
1. 0의 갯수와 1의 갯수를 파악하여 앞쪽에 0의 갯수 / 2를 출력, 뒷쪽에 1의 갯수 / 2를 출력하게 되면 예제는 맞게 되지만 문제의 요점과는 다르게 된다.
2. 탐욕법(그리디)를 추가하여 문제를 해결해야한다.
3. 가장 작은 수가 되기 위해선 0을 뒤에서 부터 지우고 1을 앞에서 부터 지우면 된다.
✏️ 풀이 과정
1. 0의 갯수와 1의 갯수를 구한다.
2. 문자열을 앞에서 부터 탐색하여 1의 갯수 / 2만큼 1을 지워준다.
3. 문자열을 뒤에서 부터 탐색하여 0의 갯수 / 2 만큼 0을 지워준다.
4. 지워지지 않은 수만 문자열로 더하여 출력한다.
⌨️ 풀이 코드
package develope;
import java.util.*;
public class Main_20310 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] arr = str.toCharArray();
String answer = "";
int count_0 = 0;
int count_1 = 0;
for(int i = 0; i < arr.length; i++){
if(arr[i] == '0') count_0++;
else count_1++;
}
count_0 /= 2;
count_1 /= 2;
for(int i = 0; i < str.length(); i++){
if(count_1 == 0) break;
if(arr[i] == '1') {
arr[i] = '-';
count_1--;
}
}
for(int i = arr.length - 1; i >= 0; i--){
if(count_0 == 0) break;
if(arr[i] == '0'){
arr[i] = '-';
count_0--;
}
}
for(int i = 0; i < arr.length; i++){
if(arr[i] != '-') answer += arr[i];
}
System.out.println(answer);
}
}
✅ 비고
- 문자열 문제이지만 그리도 알고리즘도 포함하여 풀어야 하는 문제이다.
- 숫자를 최소로 하기 위해선 0을 앞에서 뒤에서 지워야하고 1을 앞에서 지워야 한다.
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
백준 6503번 풀이 : 망가진 키보드 (JAVA) (1) | 2022.11.07 |
---|---|
백준 5710번 풀이 : 전기 요금 (JAVA) (8) | 2022.10.27 |
백준 20291번 풀이 : 파일 정리 (JAVA) (0) | 2022.10.24 |
백준 1063번 JAVA 풀이 - 킹 (0) | 2022.07.15 |
백준 1026번 JAVA 풀이 - 보물 (2) | 2022.07.12 |
Comments