LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '쉬움 (Easy)' 단계인 "Faulty Keyboard" 문제입니다.
--> https://leetcode.com/problems/faulty-keyboard/description/
문제 :
Your laptop keyboard is faulty, and whenever you type a character 'i' on it, it reverses the string that you have written. Typing other characters works as expected.
You are given a 0-indexed string s, and you type each character of s using your faulty keyboard.
Return the final string that will be present on your laptop screen.
Example 1 :
Input : s = "string"
Output : "rtsng"
Explanation :
After typing first character, the text on the screen is "s".
After the second character, the text is "st".
After the third character, the text is "str".
Since the fourth character is an 'i', the text gets reversed and becomes "rts".
After the fifth character, the text is "rtsn".
After the sixth character, the text is "rtsng".
Therefore, we return "rtsng".
Example 2 :
Input : s = "poiinter"
Output : "ponter"
Explanation :
After the first character, the text on the screen is "p".
After the second character, the text is "po".
Since the third character you type is an 'i', the text gets reversed and becomes "op".
Since the fourth character you type is an 'i', the text gets reversed and becomes "po".
After the fifth character, the text is "pon".
After the sixth character, the text is "pont".
After the seventh character, the text is "ponte".
After the eighth character, the text is "ponter".
Therefore, we return "ponter".
Constraints :
- 1 <= s.length <= 100
- s consists of lowercase English letters.
- s[0] != 'i'
이 문제는 주어진 문자열 s를 결함 있는 키보드로 입력할 때, 'i'를 입력하면 현재까지 작성된 문자열이 뒤집히고 다른 문자는 정상적으로 입력됩니다. 문자열 s를 입력한 후 최종적으로 화면에 나타나는 문자열을 반환합니다. 예를 들어, 입력이 "string"인 경우 최종 출력은 "rtsng"입니다.
class Solution {
public String finalString(String s) {
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == 'i') {
res.reverse();
} else {
res.append(s.charAt(i));
}
}
return res.toString();
}
}
이 문제는 솔직히 StringBuilder를 잘 알면 풀 수 있었던 문제 같았습니다. 코드만 읽어도 바로 이해가 쉬운 분들이 대다수지만, 그래도 설명이 필요한 분들을 위해서 아주 간단하게 브레이크다운해 보겠습니다 :
- StringBuilder 초기화 :
- res를 사용하여 결과 문자열을 만듭니다.
- 문자 순회 및 처리 :
- 문자열 s의 각 문자를 순회하면서, 'i' 문자를 만나면 res를 뒤집고, 그렇지 않으면 문자를 res에 추가합니다.
- 최종 결과 반환 :
- 최종적으로 완성된 문자열을 반환합니다.
시간 및 공간 복잡도 :
- 시간 복잡도 :
- O(n) : 문자열 s의 각 문자를 한 번씩 순회하므로 시간 복잡도는 O(n)입니다. 여기서 n은 문자열 s의 길이입니다.
- StringBuilder의 reverse 메서드는 문자열 길이에 비례하는 시간(O(k))이 소요되며, 최악의 경우 n번 호출될 수 있습니다. 따라서 최악의 경우 시간 복잡도는 O(n^2)입니다.
- 공간 복잡도 :
- O(n) : StringBuilder를 사용하여 문자열을 저장하므로 공간 복잡도는 O(n)입니다.
'LeetCode' 카테고리의 다른 글
[LeetCode] - 2710. Remove Trailing Zeros From a String (0) | 2024.07.26 |
---|---|
[LeetCode] - 2798. Numbers of Employees Who Met the Target (2) | 2024.07.26 |
[LeetCode] - 2894. Divisible and Non-Divisible Sums Difference (0) | 2024.07.26 |
[LeetCode] - 3099. Harshad Number (0) | 2024.07.26 |
[LeetCode] - 3136. Valid Word (0) | 2024.07.25 |