전공/알고리즘(algorithm)

https://www.acmicpc.net/problem/3986 지난 2-2 학기에 컴퓨테이션에서 pushdown 오토마타를 배워서인지 이 문제는 구현 아이디어를 떠올리기 쉬웠다. 풀이1(내풀이) 간단하다. pushdown automata 의 header 역할을 for문의 i 가 하고, 적용 아이디어 이미지 그대로 코드에 옮겼다 #include #include using namespace std; int main() { int n; int count = 0; cin >> n; while (n--) { string s; stack st; cin >> s; for (int i = 0; i < s.length(); i++) { if (st.size() == 0 || st.top() != s[i]) st.pu..
와 너무 힘들었다... 스택을 활용하는 건 알겠는데, 시간이 너무 오래 걸려 인터넷에서 힌트를 얻을 수 밖에 없었다. 이 힌트를 보고 코드를 작성했다. 풀이1 (내풀이) 레이저 () 인 경우 / ( ( 인 경우 / ) ) 인 경우 3가지 케이스로 나누어 작성하였다 레이저 () 인 경우 : stack에 담긴 ( 의 개수만큼 allCount(총 막대 개수) 에 더했다 ( ( 인 경우 : stack에 ( push ) ) 인 경우 : allCount에 1 추가후, stack의 ( 1개 pop #include #include #include #include using namespace std; int main() { cin.tie(NULL); ios_base::sync_with_stdio(false); vecto..
전형적인 스택 문제인 괄호 문자열 판별 풀이1(내 풀이) c++ 의 STL 을 사용하여 풀었다. 스택에서 pop을 할때는 해당 스택이 비어있는지 확인하는 것이 중요하다 - 이것땜에 처음에 오류남 #include #include #include #include using namespace std; bool isVPS(string & s) { stack ch; bool valid = true; for (int i = 0; i < s.length(); i++) { if (s[i] == '(') ch.push('('); else if (s[i] == ')') { if (!ch.empty()) ch.pop(); else valid = false; } else valid = false; } if (ch.size()..
풀이1 (내풀이) 공백 포함 문자열을 입력받기 위해서 getline(cin,s ,"\n") 함수를 사용하였다. 입력을 한번에 받고 한번에 출력하기 위해 Stack 클래스 내에 멤버로 string s를 설정하였다. #include #include #include #include using namespace std; class Stack { int to; int data[10000]; //출력 string s; public: Stack() { to = -1; } ~Stack() {} void empty() { if (to == -1) s += "1\n"; else s += "0\n"; } int isFull() { return to == 9999; } void push(int e) { if (isFull()..
아래 내용들은 'c++로 쉽게 풀어쓴 자료구조 (천인국,최영규)' 책을 읽으며 개인적으로 공부하며 정리한 것입니다. 잘못된 점이 있으면 고치겠습니다. Chapter03 Stack (스택) Stack (스택) : 후입선출(Last In First Out)의 접근 방법을 유지하는 요소들의 모음 기능 push(x) : 주어진 요소 x를 스택의 맨 위에 추가한다. pop() : 스택이 비어있지 않으면 맨 위에 있는 요소를 삭제하고 반환한다 isEmpty() : 스택이 비어있으면 true를 아니면 false를 반환한다 peek() : 스택이 비어있지 않으면 맨 위에 있는 요소를 삭제하지 않고 반환한다 ifFull() : 스택이 가득 차 있으면 true를 아니면 false를 반환한다 size() : 스택 내의 모든..
풀이1 (내풀이) 공백이 있는 경우 이에 대한 조건을 만들기가 까다로웠음 if (str[i][j] != NULL) 인 코드로 하려 했는데, 이는 오류이다 '\0' 은 NUL문자이고 NULL 은 NULL포인터 이므로, NULL 포인터는 포인터변수를 초기화할때 사용한다. 따라서 아래 코드와 같이 j > str[i]; for (int j = 0; j < 15; j++) { for (int i = 0 ;i < 5; i++) { if (j < str[i].length()) //이 조건을 생각하기에 힘들었음..
전공평점 = 학점x과목평점 (P는 계산에서 제외) 풀이1 (내풀이) cout credit >> grade; if(grade == "P") continue; sumCredit += credit; if(grade == "F") continue; if(grade[0] == 'A') temp = 4; else if (grade[0] == 'B') temp = 3; else if (grade[0] == 'C') temp = 2; else temp = 1; if (grade[1] == '+') temp += 0.5; res += credit * temp; } cout
단계별로 풀어보기 - 1316 https://www.acmicpc.net/problem/1316 풀이1 (내 풀이) 그룹단어수 이면, 이를 카운트하는 함수 : consider() 그룹단어인지 여부 판단 함수 : isGroupWord() isGroupWord() 함수 : happy -> hapy -> 버블정렬의 비교 부분을 적용해 중복된 문자 있는지 확인. 중복된 문자가 있으면 return false, 중복된 문자가 없으면 return true #include #include #include using namespace std; /* * 그룹 단어 : 한 단어열에서 특정 문자가 연속해서만 나타나야하는 단어 * vector 로 문자열을 n개 받고 * 그룹 단어 세어 결과값 반환하는 함수 -> consider..
코딩신생아(0o0)
'전공/알고리즘(algorithm)' 카테고리의 글 목록 (2 Page)