728x90
반응형
문제 풀기 전 생각 :
먼저 변수를 생성합니다
int 타입의 index를 선언합니다.
char 타입의 이차원배열을 선언합니다.
변수 row 를 만듭니다. row는 0으로 초기화합니다.
마지막 변수로 level을 선언합니다. level은 column의 역할을 합니다.
와일문으로 매 반복마다 index을 1씩 증가시키고 index가 s의 길이보다 길어지거나 같아지면 반복을 멈춘다.
반복마다 row를 증가시키며 만약 row가 numRows-1 과 같아지면 반복마다 감소시킨다.
그리고 감소하다 0에 도달하면 다시 증가하게 한다.
바로 위의 칸이 비어있다면 올라가고 있는 중이니 level을 증가시키고
만약 차있다면 그대로 둔다.
로 하려고 했지만 완성하고 메모리가 생각보다 많이 들어서
생각을 조금 더 해보니 굳이 level 변수와 이차원 배열을 써야 할 이유가 없었네요
스트링 타입으로 바꾸고 칸 띄우기에 집착하지 않고 바로 append해주니 메모리 사용이 처음보다 많이 줄었네요.
#include <iostream>
using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
int index = 0 , t1=1, t2=0;
int row = 0, level = 0;
string str[numRows];
string answer = "";
if(numRows == 1 || s.length() == 1){
return s;
}
for(int i=0 ; i< numRows ; i++){
str[i] = "";
}
while(index < s.length() ){
str[row] += s[index];
if(row == 0) {
t1 = 1;
}
else if(row == numRows-1) {
t1 = -1;
}
row += t1;
index++;
}
for(int i=0 ; i< numRows ; i++){
answer += str[i];
}
return answer;
}
};
https://leetcode.com/problems/zigzag-conversion/
풀 때 어려웠던 점 또는 느낀점 :
문제를 풀때 캐릭터 타입 이차원 배열을 사용할 바에는 스트링을 쓰는것이
더 효율적이라는 것을 몸으로 직접 겪어보니
더 체감이 되는 것 같습니다.
그리고 코드를 조금 바꿨을뿐인데 런타임이 많이 줄어드는 것을 보고
신기했습니다. 이래서 생각 정리 단계에서부터 효율적인 코드를 짜는 것이
중요하단 것을 깨달았습니다.
728x90
반응형
'Problem Solving' 카테고리의 다른 글
[C++] [백준 11721] 열 개씩 끊어 출력하기 (pps 3-2) (0) | 2021.07.13 |
---|---|
3-1. Student Attendance Record I (LeetCode 551) (0) | 2021.07.10 |
2-9. Repeated String Match (LeetCode 686) (0) | 2021.07.08 |
2-8. IBM 빼기 1 (백준 6321) (2) | 2021.07.08 |
2-7. Backspace String Compare (LeetCode 844) (0) | 2021.07.08 |
댓글