목록백준(Baekjoon) 문제 (142)
코딩하기 좋은날
https://www.acmicpc.net/problem/7785 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 string과 set을 사용하여 쉽게 풀었습니다. 사람 이름과 출근 상태를 각각 스트링으로 받았고 enter인 경우엔 set에 집어놓고 leave인 경우 set에 존재한다면 제거를 해주었습니다. 출력은 사전상 역순 출력이므로 set을 정의할때 정렬 조건에 greater를 넣어 주었습니다. 아래는 코드입니다. #include #include #include using namespace std; int main(void) { int n; //출입 기록의 수 set s; // 사전 순 역순이므로 greater를 정렬 기준으로 설정 cin>>n; while(n) { string s1..
https://www.acmicpc.net/problem/1620 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 처음에 string 배열에 각 포켓몬 이름을 입력받고 stringstream을 통해 숫자가 나온 경우엔 포켓몬 이름을 출력하고 그렇지 않은경우엔 입력받은 스트링과 스트링 배열을 비교해서 출력 하는식으로 풀었는데 계속 시간초과가 나서 조금 애를 먹었습니다. 처음에는 cout, endl이 시간을 많이 잡아 먹는다고 하여서 printf, scanf로 바꾸었고, 또한 문자가 입력된 경우 스트링 배열 처음부터 비교하는 for문이 있었는데 map을 이용하면 아예 비교를 할 필요가 없다는걸 알았습니다. 아래는 코드입니다. #include #include #include #include u..
https://www.acmicpc.net/problem/1966 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 1966번 프린터 큐 문제는 큐와 우선 순위 큐를 이용해서 풀었습니다. 프린터에서 문서의 위치와 중요도를 저장하기 위해 큐에는 페어클래스를 각각 저장하였고 우선 순위큐는 max heap으로 만들어서 큐의 중요도와 비교를 하였습니다. max heap의 top부분과 큐의 value값이 같아질 때까지 반복문을 돌려서 큐의 front를 back으로 옮기고 두 값이 같아지는 경우 처음에 입력받은 위치값과 큐의 first 값을 비교하여 같다면 위치를 출력하였습니다. 두 값이 같아도 위치값이 다르다면 각각 큐에서 pop을 한뒤 다시 반복문을 돌도록 하였습니다. 같은 중요도인 문서가 없다면 우선순위 ..
https://www.acmicpc.net/problem/1918 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 중위표기식을 입력받아 후위표기식으로 바꾸는 문제이다. 연산자들의 우선순위를 고려하고, 스택을 이용하면 해결이 된다. 연산자의 우선순위는 *,/ 가 가장 높고 +,- '(' 순이다. 스택에 들어 갈 때 *,/ 는 자기 자신들을 만나면 pop 시키고 그 이외엔 push 된다. +,- 는 '(' 을 만나면 push 되고 그 이외의 연산자를 만나면 계속 pop시킨다. '(' 연산자는 우선순위가 가장 낮으므로 push되고 ')' 연산자가 들어오면 그사이의 연산자들을 pop시킨다. 스택이 비어있을때는 top를 호출하면 안되고, 연산자가 같거나 우선순위가 높은 연산자가 스택의 top에 들..
https://www.acmicpc.net/problem/9012 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 n1,n2를 '(' ')' 의 개수를 저장하는 변수로 지정하여 VPS가 되기 위해서 n2는 n1보다 항상 작거나 같아야하고 마지막엔 n1과 n2의 개수가 같아야 한다 라는 조건을 이용하여 풀었다. 스택을 이용해서 '(' 들어오면 push를 하고 ')' 가 들어오면 pop을 하고 pop을 할 수 없으면 NO 연산이 끝난후 stack이 비어있으면 YES를 출력하는 형식으로 풀어도 괜찮을 것 같다. #include using namespace std; int main(void) { int T; cin>>T; while(T) { int n1 = 1; int n2 = 0; bool f..
https://www.acmicpc.net/problem/10828 문제와 채점은 위의 사이트에서 확인 하실 수 있습니다. 백준 사이트의 10828 번 문제 문자열만 비교해서 동작을 시켜주면 해결된다. 저는 직접 스택을 만들었지만 stl에 있는 스택을 사용하면 더짧게 짤수 있을 것 같습니다. 아래는 코드입니다. #include #include using namespace std; class stack { private: int t; int *v; public: stack() { v = new int[10000]; t = -1; } ~stack() { delete []v; } bool empty() { if(t == -1) return true; else return false; } void push(in..