본문 바로가기

알고리즘 문제 풀이

Q10. 연속된 홀수 사이 "-" 추가하기. // update 완료

 

 

==============해답==================

package com.codestates.coplit; 
import java.util.*;

public class Solution { 
  public String insertDash(String str) {
    // TODO:
    /*
    문자열 입력받아 연속된 한자리 홀수 숫자 사이에 '-' 추가한 문자열 리턴.
    <주의사항>
    1. 0은 짝수
    <풀이>
    1. str을 기반으로 StringBuilder로 만든다.
    2. 연속된 홀수 숫자를 찾는다.
    홀수 다음 홀수i, i+1 
    */

    if(str.length() == 0) {
      return null;
    }
    String result = "" + str.charAt(0);
    // 연속된 홀수 사이에 넣는거라 첫 숫자에 -를 넣을리는 없으니 0번 인덱스를 따로 뺀다.

    for(int i = 1; i < str.length(); i++) {
      // str.charAt(0)은 따로 빼두었으니 i=1 부터 시작.
      if(str.charAt(i-1) %2 != 0 && str.charAt(i) % 2 != 0) {
           result = result + "-";        
        // if문 안의 내용이 참일 경우 result = result + "-" 라고 되어 있는데
        // 어째서 str.charAt(i-1)이 result에 추가되는지 이해가 안가서 문의 드린 상태.
      }
      result = result + str.charAt(i);
    }
    return result;
  } 
}
=================================update 12/04/2022========================
 
String result = "" + str.charAt(0);
    // 연속된 홀수 사이에 넣는거라 첫 숫자에 -를 넣을리는 없으니 0번 인덱스를 따로 뺀다.

    for(int i = 1; i < str.length(); i++) {
      // str.charAt(0)은 따로 빼두었으니 i=1 부터 시작.
 
      if(str.charAt(i-1) %2 != 0 && str.charAt(i) % 2 != 0) {
        result = result + "-";
        // if문 안의 내용이 참일 경우 result에 "-" 추가.
      }
      result = result + str.charAt(i);
        // 기본적으로 result는 str.charAt(i)가 계속 추가되는 상황.
    }
    return result;
 
 
===========================해석===========================================
처음에 str을 char[] 로 변경하여 인덱스 별로 계산하여 연속 홀수가 발견되면 i+1 자리에 -를 넣으려고 했으나,
한번 - 를 넣고나면 자리수가 하나씩 밀려난다는걸 인지하지 못하여 실패.
 
reference 답으로 봐서는 str을 char[] 으로 변경하지않고 str.charAt(i) 메소드를 활용해서 str의 각 자리수로 계산을 했다.
 
문제에서는 연속된 홀수일 경우 사이에 - 를 추가하는거니 0번째부터 -가 추가될 일은 없으므로
String result에 str.charAt(0)과 ""를 넣어서 선언하고, i, i+1 로 계산하는게 아닌 i-1, i 로 인덱스를 조건으로 진행했다.
0번 인덱스를 result에 선언했기에 i=1 부터 시작해서 0번째 인덱스를 계산하려면 i-1, i 로 해야해서 그런것 같다.
조건문 안의 내용이 false인 경우 result = result + str.charAt(i)로 계속 쌓아나가도록하고
if문으로 만약 연속된 홀수가 확인되면 result = result + "-"; 로 -를 추가하는 식으로 문제를 해결했다.