1373번 - 2진법을 8진법으로
이 문제는 푸는데 시간초과가 자꾸 나서 질문 게시판에 글을 올렸었다.
한 고수분께서 친절하게 답변해주셨다.. substr 이란 놈이 시간을 엄청 잡아먹는거였다..
앞으로 조심해서 사용해야겠다.. 그래서 결국 substr 을 쓰지 않고 size란 변수를 만들어서 증가시켜주니까 AC를 받았다.
< 정답 코드 >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #include<iostream> #include<string> #include<math.h> using namespace std; int main() { string s; getline(cin, s); int size = 0; while (s.size()>size) { int check=(s.size()-size) % 3; int tmp1 = s[size] - '0'; int tmp2 = s[size + 1] - '0'; int tmp3 = s[size + 2] - '0'; int ans = 0; if (check == 0) { ans = tmp1 * 4 + tmp2 * 2 + tmp3; printf("%d", ans); size += 3; } else if (check == 1) { ans = tmp1; printf("%d", ans); size += 1; } else if (check == 2) { ans = tmp1 * 2 + tmp2; printf("%d", ans); size += 2; } } printf("\n"); return 0; } | cs |
< 처음에는 2진법을 10진법으로 바꾼뒤 8진법으로 변환 : 시간 초과 >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | #include<iostream> #include<string> #include<math.h> #include<stack> using namespace std; int main() { string s; cin >> s; int size = s.size(); long long num = 0; while (!s.empty()) { char tmp = s.front(); num += (tmp - '0')*pow(2, size - 1); size -= 1; s=s.substr(1); } stack<int> st; while (num != 0) { st.push(num % 8); num /= 8; } while (!st.empty()) { cout << st.top(); st.pop(); } cout << endl; return 0; } | cs |
< 2진법을 3개씩 끊어서 8진법으로 표현 : 시간초과 >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include<iostream> #include<string> #include<math.h> #include<queue> using namespace std; int main() { string s; queue<int> q; getline(cin, s); while (!s.empty()) { int size = s.size(); int tmp1 = s[0] - '0'; int tmp2 = s[1] - '0'; int tmp3 = s[2] - '0'; int ans = 0; if (size % 3 == 0) { ans = tmp1*4 + tmp2*2 + tmp3; printf("%d", ans); s = s.substr(3); } else if (size % 3 == 1) { ans = tmp1; printf("%d", ans); s = s.substr(1); } else if (size % 3 == 2) { ans = tmp1*2 + tmp2; printf("%d", ans); s = s.substr(2); } } printf("\n"); return 0; } | cs |
반응형