일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 알고리즘
- c++
- 오퍼레이팅시스템
- Computer science
- Stack
- 컴공
- 코테
- coding
- OS
- 브루트포스
- 문제풀이
- bfs
- 개발
- cs
- 코딩
- 백준
- 구현
- DP
- 컴퓨터공학과
- 자료구조
- Operating System
- 북리뷰
- 그래프
- 정석학술정보관
- 오에스
- 정석
- 컴공과
- 너비우선탐색
- vector
- 스택
- Today
- Total
목록string (9)
Little Jay
좀 비효율적인 코드이긴한데 전체적인 로직에서 크게 다를점이 없다. 결과적으로 '-'가 언제 들어오는지가 관건이 된다. https://www.acmicpc.net/board/view/86898 여기에 반례가 정리되어 있는데 이 반례를 보면 결국 '-'가 한번 들어오고 '+'가 들어와도 괄호를 끝까지 쳐버리면 되고, '-'가 연속적으로 들어오게 된다면 그냥 괄호를 치지 않고 계속해서 빼기만 해주면 된다. 이 점만 좀 유의하면 한 번에 correct이 뜰 수 있었을텐데 아쉽다. 코드는 좀 지저분하고 비효율적이라 로직만 참고하시길 바란다. #include #define endl '\n' using namespace std; string s, num; int temp; int main() { ios::sync_w..
C++ Array 연습 기초 첫 번째는 무지성 string으로 푸는 방법이다. O(n^2)로 간단하게 풀 수 있는 문제이다. 처음 for문은 char 알파벳이 돈다 이제 다음 for문은 입력된 string 안에있는 char과 처음 for문의 알페벳이 몇개나 일치하는지 확인한다. #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); string s; cin >> s; for (char i = 'a'; i
생각보다 생각을 많이 해야했던 문제이다. 코테는 항상 문제를 잘 분석하는 것에서부터 시작한다. 1. 항상 문제를 잘 읽어야 한다 문제에 낚시가 있었는데, 그것을 긴급번호로 쓰여진 것이었다. 그러니까 당연히 긴급번호가 처음으로 들어오고 그 번호를 기준으로 substr을 하면 되는줄 알고 계속 틀렸었다. 그러나 문제는 긴급번호가 기준이 아닌 모든 전화번호를 기준으로 문제를 풀어야한다 ex) 11240 48298405824 113 113134 NO 즉, 첫 번째에 상관없이 어떤 전화번호가 다른 전화번호의 전화번호가 되면 안된다는 것이다. 2. 빠른 탐색을 위해 sort를 통해서 vector를 정렬시키고, length를 비교해서 current가 next보다 길면 넘겨버렸다 접두사라는 개념을 생각하면, curre..
string을 잘 split하고 reverse 하면 풀 수 있는 문제 #include #include #include #include #include using namespace std; vector split(string input, char delimiter) { vector answer; stringstream ss(input); string temp; while (getline(ss, temp, delimiter)) { answer.push_back(temp); } return answer; } int main() { int n; cin >> n; cin.ignore(); for (int i = 0; i < n; i++) { string s; getline(cin, s); vector v = sp..
getline을 사용하면 간단히 해결되는 문제인 것 같다. #include #include using namespace std; int main() { string s; while (getline(cin, s)) { cout
algorithm 헤더에는 sort라는 기능이 있는데 그 기능에 약간 손을 봐주면 되는 문제 sort 기능에 마지막 세 번째에 함수를 넣어 주어서 그 함수의 return값대로 정렬을 하면 되는 문제이다 이번 문제에서는 compare이라는 함수를 사용해서 단어의 길이를 비교해주어 sort하도록 유도했다 #include #include #include #include using namespace std; bool compare(string a, string b) { if (a.size() == b.size()) { return a > n; string s, temp; vector v..
이렇게 푸는 것이 맞는지는 모르겠지만 풀이를 설명하자면 먼저 ( 가 들어올 때 스택에다가 push를 해준다 만약 ( 가 들어오고 다음게 ) 면 레이저를 쏴주야 하기 때문에 스택의 사이즈만큼 계속 더해준다 만약 그것도 아니고 ) 만 들어온다면 마지막에는 하나씩 남는 막대가 생기기 때문에 하나씩 total 개수에 더해준다 #include #include #include using namespace std; int main() { string s; cin >> s; stack st; int total_bar = 0; for (int i = 0; i < s.size(); i++) { if (s[i] == '(' && s[i + 1] == ')') { total_bar += st.size(); i++; conti..
왜인지는 모르겠지만 이걸 푸는데 좀 오래 걸렸다 종말의 숫자란 666 1666 2666 3666 4666 5666 6660 6661 6662 .... 7666 이렇게 666이 연속으로 들어가 있는 숫자를 말한다 문제 자체도 Brute Force 알고리즘으로서 처음 시작인 666부터 올라가야 한다 여기에 대해서 패턴이 없으므로 1을 더해주면서 값을 찾아야 한다 string의 to_string이랑 find 기능을 쓰면 생각보다 편한 문제 #include #include using namespace std; int main() { int n; int count = 0, end_num = 666; cin >> n; string s; while (true) { s = to_string(end_num); if (s..
to_string 메소드를 생각하면 쉽게 풀 수 있었다. #include #include using namespace std; int main() { long a, b, c; cin >> a >> b >> c; long sum = a * b * c; string num; num = to_string(sum); int len = num.length(); int numArr[10]{ 0 }; for (int i = 0; i < len; i++) { switch (num[i]) { case '0': numArr[0]++; break; case '1': numArr[1]++; break; case '2': numArr[2]++; break; case '3': numArr[3]++; break; case '4':..