반응형

자료구조 2

BOJ 5430 AC

이 문제를 읽어보면 배열을 뒤집고 삭제하는 작업이 여러번 반복되는 문제임을 알수 있다. 일반 백터를 활용하여 풀기를 시도한다면 원소의 제일 첫번째를 삭제하는것 뿐만아니라 값을 뒤집는것 또한 귀찮은 일이다. 이때 이를 손쉽게 할수 있는 덱(dequeue)을 사용하면 간단히 해결 가능하다. 입력 문자열을 파싱하여 R일경우 뒤집힘을 알수 있다. 여기서 덱의 특징을 이용한 간단한 트릭을 사용한다면 다음과 같이 생각해볼 수 있다. 1. R이 나오지 않은 상태에서 D를 만난다면 덱의 front에서 pop을 해준다. 2. R이 나올때마다 pop의 위치를 바꿔준다. 위의 방법을 반복하여 수행한 후 마지막 출력시 현재 상태가 front인지 back 인지 확인 후 알맞게 출력해 주면된다. #include #include ..

알고리즘/boj 2023.03.07

BOJ 10816 숫자 카드 2

이 문제는 상근이가 가지고 있는 숫자 카드 N개 중 주어진 M(정수)를 몇개씩 가지고 있는지 구한는 문제이다. N은 -10,000,000 ~ 100,000,000 사이의 숫자로 중복된 값이 들어올 수 있다. 이를 해결하기 위해 N개의 카드 중 특정 숫자가 몇개 존재하는지 체크를 해야한다. 가장 간단한 방법은 카드에 적혀 있는 숫자를 배열의 인덱스로 하여 카운팅 해주는게 편리한데 그렇게 할 경우 인덱스 범위가 0~ 200,000,000이 되어 해당 크기의 배열을 정의할 수 없다. 따라서 다른 방법을 생각해야한다. 생각해낸 방법은 백터를 이용하여 N을 정렬한 후 순차 탐색하면서 이전의 값이랑 중복되는지 안되는지 확인하여 새로운 해싱 백터를 만드는 것이다. 자세한 방법은 아래 코드에서 확인할 수 있다. 위의 ..

알고리즘/boj 2023.02.10
반응형