목차
▸ 옹알이(2)
▸ 숫자 짝궁
▸ 체육복
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 옹알이(2)
[오답 코드]
class Solution {
public int solution(String[] babbling) {
int answer = 0;
int same = 0;
for(int i = 0; i < babbling.length; i++){
babbling[i] = babbling[i].replace("aya", "1");
babbling[i] = babbling[i].replace("ye", "2");
babbling[i] = babbling[i].replace("woo", "3");
babbling[i] = babbling[i].replace("ma", "4");
}
for(int i = 0; i < babbling.length; i++){
if(babbling[i].equals("11")){
same++;
} else if(babbling[i].equals("22")){
same++;
} else if(babbling[i].equals("33")){
same++;
} else if(babbling[i].equals("44")){
same++;
}
babbling[i] = babbling[i].replace("1", "");
babbling[i] = babbling[i].replace("2", "");
babbling[i] = babbling[i].replace("3", "");
babbling[i] = babbling[i].replace("4", "");
if(babbling[i].isEmpty()){
answer++;
}
}
return answer - same;
}
}
[수정 코드]
class Solution {
public int solution(String[] babbling) {
int answer = 0;
for(int i = 0; i < babbling.length; i++){
//먼저, 각 발음을 다른 문자로 바꾸기
babbling[i] = babbling[i].replace("aya", "1");
babbling[i] = babbling[i].replace("ye", "2");
babbling[i] = babbling[i].replace("woo", "3");
babbling[i] = babbling[i].replace("ma", "4");
}
for(int i = 0; i < babbling.length; i++){
//연속된 발음인 경우도 같은 문자로 바꾸기
babbling[i] = babbling[i].replace("11", "0");
babbling[i] = babbling[i].replace("22", "0");
babbling[i] = babbling[i].replace("33", "0");
babbling[i] = babbling[i].replace("44", "0");
//공백으로 바꾸기
babbling[i] = babbling[i].replace("1", "");
babbling[i] = babbling[i].replace("2", "");
babbling[i] = babbling[i].replace("3", "");
babbling[i] = babbling[i].replace("4", "");
if(babbling[i].isEmpty()){
answer++;
}
}
return answer;
}
}
출처: 프로그래머스 코딩테스트 연습 > 연습문제 > 숫자 짝궁
[오답 코드]
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public String solution(String X, String Y) {
String answer = "";
int zerocnt = 0;
char[] x = X.toCharArray();
char[] y = Y.toCharArray();
List<Character> same = new ArrayList<>();
//같은 숫자 찾기(중복 제외)
for(int i = 0; i < x.length; i++){
for(int j = 0; j < y.length; j++){
if(x[i]==y[j]){
same.add(x[i]);
y[j] = 'x';
}
}
}
//거꾸로 정렬
Collections.sort(same, Collections.reverseOrder());
if(same.size() == 0){
same.add('-');
same.add('1');
}
//정답 문자열 만들기
for(Character chars : same){
if(chars.equals('0')){
zerocnt++;
}
if(zerocnt == same.size()){
answer = "0";
}else{
answer += chars;
}
}
return answer;
}
}
[수정 코드]
class Solution {
public String solution(String X, String Y) {
int[] xCnt = new int[10];
int[] yCnt = new int[10];
StringBuilder stringBuilder = new StringBuilder();
for(String x : X.split("")){
xCnt[Integer.parseInt(x)]++;
}
for(String y : Y.split("")){
yCnt[Integer.parseInt(y)]++;
}
for(int i = 9; i >= 0; i--){
while(xCnt[i] > 0 && yCnt[i] > 0){
stringBuilder.append(i);
xCnt[i]--;
yCnt[i]--;
}
}
if(stringBuilder.toString().equals("")){
return "-1";
}else if(stringBuilder.toString().substring(0,1).equals("0")){
return "0";
}else{
return stringBuilder.toString();
}
}
}
출처: 프로그래머스 코딩테스트 연습 > 탐욕법(Greedy) > 체육복
import java.util.Arrays;
class Solution {
public int solution(int n, int[] lost, int[] reserve) {
int answer = n - lost.length;
Arrays.sort(lost);
Arrays.sort(reserve);
for(int i = 0; i< lost.length; i++){
for(int j = 0; j < reserve.length; j++){
//여분의 체육복이 있는 학생이 잃어버린 경우
if(lost[i] == reserve[j]){
lost[i] = -1;
reserve[j] = -1;
answer++;
}
}
}
//체육복 빌려주기
for(int i = 0; i < lost.length; i++){
for(int j = 0; j < reserve.length; j++){
if(lost[i]-1 == reserve[j] || lost[i]+1 == reserve[j]){
reserve[j] = -1;
answer++;
break;
}
}
}
return answer;
}
}