목록IT/Algorithm (12)
Endless Motivation
int romanToInt(string str) { int num = 0; map roman = { {'I', 1},{ 'V', 5 },{ 'X', 10 },{ 'L', 50 },{ 'C', 100 },{ 'D', 500 },{ 'M', 1000 }}; for (int i = str.length() - 1; i >= 0; i--) { int add = 0; if (i != 0 && roman[str[i]] > roman[str[i - 1]]) { add = roman[str[i]] - roman[str[i - 1]]; i--; } else { add = roman[str[i]]; } num += add; } return num; } 로마 숫자 문자열을 정수로 바꾸는 문제 각 로마숫자 기호를 map으로 맵..
int maxArea(vector& height) { int water = 0; int left = 0, right = height.size() - 1; while( left != right ) { if (water = height[right]) { right--; } else if (height[left] < height[right]) { left++; } } return water; } 주어진 벡터가 벽의 높이(m)이며 각 벽은 1m씩 떨어져 있을 때 가장 많은 물..
int reverse(int num) { int offset = 1; int res = 0; int max = 0x7fffffff; int min = 0x80000000; string numStr = to_string(num); int start = num 3) { res = 0; break; } int add = atoi(&c) * offset; if (max - res < add) { res = 0; break; } res += add; offset *= 10; } if (num < 0) {..
string convert(string str, int numRows) { string res = ""; vector list; list.resize(numRows); int listIdx = 0; int offset = (numRows == 1 ? 0 : 1); for (int i = 0; i < str.length(); i++) { if (numRows != 1 && i % (numRows - 1) == 0 && i != 0) { offset *= -1; } list[listIdx].push_back(str[i]); listIdx += offset; } for (int i = 0; i < numRows; i++) { for (int j = 0; j < list[i].size(); j++) { res ..
vector twoSum(vector& nums, int target) { vector res; for(int i = 0; i = 0; j--){ if(nums[i] + nums[j] == target && i != j){ res.push_back(i); res.push_back(j); } } } return res; } 두 수를 더해 target이 나오는지를 판단 time out을 막기 위해 각 index를 begin과 end에서 접근시켜 찾는다.
int lengthOfLongestSubstring(string s) { deque sub; deque::iterator flag; int start = 0, end = 0; int max = 0; for (int i = 0; i < s.length(); i++) { if ((flag = find(sub.begin(), sub.end(), s[i])) != sub.end()) { while (true) { if (sub.begin() == flag) { sub.pop_front(); break; } sub.pop_front(); } } sub.push_back(s[i]); if (max < sub.size()) max = sub.size(); } return max; } 주어진 문자열 안에서 문자 중복 ..