알고리즘

프로그래머스 - 푸드 파이트 대회

최데브 2024. 8. 21. 13:28

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

 

프로그래머스

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

programmers.co.kr

문제 설명은 길지만 결과 문자열 중간에는 물을 의미하는 "0" 이 무조건 와야하고

왼쪽에서 먹기 시작하는 사람 , 오른쪽에서 먹기 시작하는 사람이 동일하게 음식을 먹어야하기 때문에

문자열은 좌우 대칭이 되어야한다.

 

좌우대칭이 되려면 음식은 짝수개로만 쓸 수 있는데 

주어진 음식이 홀수개인 경우는

 

(food[i] / 2).toInt()

 

2로 나누고 정수형으로 변경해줬다.

이렇게 하면 음식이 1번 음식이 3개 주어졌을때도 1이라는 값이 나와서

좌우에 한개씩 둬야한다는걸 알 수 있게 된다.

 

이렇게 만든 문자열을 frontString 이라는 변수에 저장해두고

중앙에 와야하는 "0"을 추가해준뒤

대칭을 위해 frontString  를 뒤집고  결과에 합쳐주면 완성된다.

class Solution {
    fun solution(food: IntArray): String {
        var answer: String = ""
        var frontString = ""
        for(i in 1 until food.size){
            for(j in 0 .. (food[i] / 2).toInt() - 1){
                answer += i.toString()
            }
        }
        frontString = answer
        answer+= "0"
        answer+= frontString.reversed()
        
        return answer
    }
}
반응형