본문 바로가기

개발/코테 TIL

[코테 TIL#17] 프로그래머스 푸드 파이트 대회

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/134240

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이
import java.lang.StringBuilder;
import java.util.Stack;

class Solution {
    public String solution(int[] food) {
        StringBuilder answer = new StringBuilder();
        Stack<Integer> stack = new Stack();
        
        for(int i = 1; i < food.length; i++) {
            if(food[i] == 1) {
                continue;
            }
            
            for(int j = 0; j < food[i]/2; j++) {
                answer.append(i);
                stack.push(i);
            }
        }

        answer.append(0);
        
        while(!stack.isEmpty()) {
            answer.append(stack.pop());
        }
        
        return answer.toString();
    }
}

 

정방향으로 한번 담고 그걸 뒤바꿔서 담으면 될 거 같은데 적당한 함수가 안 떠올라서 그냥 Stack을 사용하기로 했다. Java 공부를 많이 해야겠다..

 

문제점 : 어짜피 1/2 는 0이라 for문 안 도니까 if(food[i] == 1) {continue;} 이 부분이 필요가 없었다.

 

 

수정된 풀이
import java.lang.StringBuilder;
import java.util.Stack;

class Solution {
    public String solution(int[] food) {
        StringBuilder answer = new StringBuilder();
        Stack<Integer> stack = new Stack();
            
            for(int j = 0; j < food[i]/2; j++) {
                answer.append(i);
                stack.push(i);
            }
        }

        answer.append(0);
        
        while(!stack.isEmpty()) {
            answer.append(stack.pop());
        }
        
        return answer.toString();
    }
}

 

 

다른 사람 풀이
class Solution {
    public String solution(int[] food) {
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < food.length; i++) {
            sb.append(Integer.toString(i).repeat(food[i] / 2));
        }
        return sb.toString() + "0" + sb.reverse().toString();
    }

}

 

StringBuilder의 reverse함수를 사용하면 되는 군 !

repeat을 활용하여 for문을 하나만 사용하셨다.

 

 

repeat
repeat(n) : 문자열 n번 반복

"A".repeat(3) -> "AAA"

 

Java 11 부터 추가된 함수로 문자열을 n번 반복해주는 함수이다.