728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/134240
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드(Java)
class Solution {
public String solution(int[] food) {
StringBuilder left = new StringBuilder();
for (int i = 1; i < food.length; i++) {
int count = food[i] / 2;
for (int j = 0; j < count; j++) {
left.append(i);
}
}
// 가운데 '0'을 넣고, 오른쪽은 left를 뒤집어서 붙임
StringBuilder result = new StringBuilder();
result.append(left);
result.append("0");
result.append(left.reverse());
return result.toString();
}
}
- 자바에서는 문자열을 계속 더하면 성능이 떨어지기 때문에 `StringBuilder` 사용함
- `append()`는 문자열을 효율적으로 붙여주는 메서드
- `revers()`는 문자열을 뒤집어줌
- 마지막에 `toString()`으로 일반 문자열로 변환
코드(Python)
def solution(food):
# 리스트에 담았다가 마지막에 join으로 합치면 성능이 좋아짐
left_side = []
for i in range(1, len(food)):
left_side.append(str(i) * (food[i] // 2))
left = ''.join(left_side)
return left + '0' + left[::-1]
- 파이썬에서 문자열은 불변(immutable)이라 `+=`로 문자열을 계속 붙이면, 매번 새로운 문자열을 만들기 때문에 비효율적!
- 그래서 `list`에 먼저 모아두고 `''.join()`으로 합치면 훨씬 빠름
- `[::-1]`은 문자열을 뒤집는 파이썬 문법 예: `"123"[::-1] → "321"`