잉?

[프로그래머스] lv.1 푸드 파이트 대회 (JAVA 자바) 본문

알고리즘_Algorism/프로그래머스

[프로그래머스] lv.1 푸드 파이트 대회 (JAVA 자바)

Jye_647 2023. 8. 2. 22:36
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


첫 번째 풀이

  1. food의 index값이 1, 짝수, 홀수 일 때를 나눠서 비교한다.
  2. 해당 조건에 적합하면 Integer.toString을 통해 int형을 String형으로 변경해 주고 값을 넣어준다.
  3. 위의 answer값을 for문을 통해 내림차순으로 값을 넣어준다.

두번째 풀이

  1. StringBuilder를 선언한다.
  2. 이중 for문을 통해 해당 값을 builder에 추가해 준다.
  3. reverse() 메서드를 통해 반대되는 순서도 추가해 준다.

실패 풀이 코드

public String solution(int[] food) {
        List<Integer> list = new ArrayList();

        for(int i=1; i<food.length; i++){
            if(food[i] == 1){
               continue;
            }else if(food[i] % 2 == 0){
                for(int j=0; j<food[i]/2; j++){
                    list.add(i);
                }
            }else{
                for(int j=0; j<(food[i]-1)/2; j++){
                    list.add(i);
                }
            }
        }
        
        String answer = list.toString() + "0";
        Collections.reverse(list);
        answer += list.toString();

        return answer;
}

결과 : 아래와 같은 형식으로 작성되어 실패

[1, 2, 2, 3, 3, 3]0[3, 3, 3, 2, 2, 1]

[1, 1, 1, 3]0[3, 1, 1, 1]


첫 번째 풀이 코드

public String solution(int[] food) {
        String answer = "";

        // 인덱스 1부터 시작 index[0]은 물이다.
        for(int i=1; i<food.length; i++){
            if(food[i] == 1){ // index값이 1이면 넘긴다.
                continue;
            }
            else if(food[i] % 2 == 0){
                for(int j=0; j<food[i]/2; j++){
                    // index값이 짝수일때 food[i]/2만큼 toString을 사용하여 값 넣어준다.
                    answer+=Integer.toString(i);
                }
            }else{
                for(int j=0; j<(food[i]-1)/2; j++){
                    // index값이 홀수일때 food[i]/2만큼 toString을 사용하여 값 넣어준다.
                    answer+=Integer.toString(i);
                }
            }
        }

        String reverse = "";
        // 반대되는 값을 for문으로 역순으로 넣어준다.
        for(int i=answer.length()-1; i>=0; i--){
            if(i==answer.length()-1) reverse += "0";
            reverse += answer.charAt(i);
        }

        return answer + reverse;
   }

두 번째 풀이 코드

public String solution(int[] food) {
        // StringBuilder를 사용한다.
        StringBuilder sb = new StringBuilder();

        for(int i=1; i<food.length; i++){
            for(int j=0; j<food[i]/2; j++){
                // 이중for문을 이용하여 값 추가
                sb.append(i);
            }
        }

//      sb에 toString()을 붙이지 않으면 reverse()값이 출력된다.
        return sb.toString() + "0" + sb.reverse();
    }

 


StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가지게 되어,

문자열을 바로 추가할 수 있어 공간의 낭비도 없으며 문자열 연산 속도도 매우 빠르다는 특징이 있다.

 

 

☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되

inpa.tistory.com

 

Comments