목록전체 (195)
코딩하기 좋은날
저는 평범한 대학생입니다. 잘못된 부분이 있다면 알려주시면 확인 후 바로 수정하겠습니다. 오늘은 C++의 STL 컨테이너 구조중 list와 multimap 에 대해서 알아 보겠습니다. 1.list -list 컨테이너는 Double linked list인 이중 연결 리스트로 구현 되어 있습니다. - 헤더파일을 추가하면 사용이 가능합니다. - 기본적인 연산들은 vector와 비슷하지만 list 구조는 양방향으로 삽입 삭제가 가능합니다. - list는 각각이 포인터로 연결되어 있어 at이나,[] 사용이 불가능하고 iterator를 통한 방식으로만 접근이 가능합니다. - list는 기본적으로 array와 달리 삽입과 삭제에 있어서 굉장히 효율적입니다. 따라서 그러한 작업이 많이 존재 할 때 사용하시면 좋습니다...
https://www.acmicpc.net/problem/2910 문제와 채점은 위 사이트에서 확인 하실 수 있습니다. 이 문제는 list를 사용해서 값들을 입력받고 존재하는 값과 그 값의 빈도를 multimap 에다 저장 하였습니다. 확인한 값은 remove로 다제거 시키기 위해서 list를 사용하였고 처음에 map을 사용해서 틀렸었는데 동일 빈도인 경우가 존재하므로 multimap을 사용해서 맞았습니다. #include #include #include #include using namespace std; int main(void) { list l; multimap m; int N,C; // N은 메시지 길이 C는 상수 cin>>N>>C; int num; int i; vector v; while(N) ..
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을 한뒤 다시 반복문을 돌도록 하였습니다. 같은 중요도인 문서가 없다면 우선순위 ..
저는 평범한 대학생입니다. 잘못된 부분이 있다면 알려주시면 확인 후 바로 수정하겠습니다. 오늘은 C++에서 자주 사용되는 클래스인 Pair 클래스에 대해서 소개하려고 합니다. Pair Pair의 뜻처럼 STL에서 데이터 '쌍'을 표현할 때 사용이 됩니다. 헤더파일에 존재하고 있으며, 보통 다른 STL컨테이너와 함께 사용이 되는데 그럴 때는 다른 STL의 헤더에 포함이 되어 있으므로 따로 선언 해주지 않아도 됩니다. 선언 방식은 pair p; 의 형태로 클래스를 선언하며 앞의 글에서 map에 insert 할시 make_pair 함수를 이용한 적이 있는데 p = make_pair(변수1, 변수2); 의 형태로 변수1과 변수2가 들어간 pair를 p에 넣을 수 있습니다. 첫번째 변수에 접근 할 때는 p.fir..
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..