본문 바로가기

Algorithm45

1911_흙길 보수하기 ▶실버1 풀이 1. 주어진 웅덩이를 정렬한다. 2. 한 웅덩이에 대해 몫과 나머지를 구한 후 몫의 개수만큼 널빤지를 사용한다. 2-1. 나머지가 존재하면 널빤지를 하나 더 더해준다. 2-2. 나머지가 존재하지 않으면 건너뛴다. 3. 현재 위치가 웅덩이가 아니라면 다음 웅덩이의 첫 위치를 현재 위치로 설정한다. 코드 #include #include #include #include #include #include #include #include using namespace std; vector pool; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int ans = 0; int n, l; cin >> n >> l; for (int i.. 2023. 2. 28.
3190_뱀 ▶골드4 풀이 사과를 먹은 개수에 맞는 몸길이 유지, 방향 전환, 조건 만족 여부가 관건인 문제이다. 먼저 현재 방향에 맞게 앞으로 한 칸 전진 한 후, 그 자리에 사과가 존재하면 그대로, 존재하지 않으면 꼬리를 제거한다. 그리고 방향 전환 시간이 되었을 시, D일 경우 우회전, L일 경우 좌회전을 한다. 필요한 자료구조로는, ① 현재 방향을 나타내는 방향 배열(x, y 두 개) ② 방향 전환 queue(시간과 방향 두 개를 받음) ③ 뱀 몸 인덱스 queue(x, y 두 개) ④ 뱀이 지나간 여부를 나타내는 2차원 배열 ⑤ 사과가 존재하는 여부를 나타내는 2차원 배열 먼저 입력을 받고 적절한 자료구조에 데이터를 넣어준다. 현재 x위치, y위치에 현재 방향에 맞게 1칸 전진한 값을 더해준다. 그 자리에 .. 2023. 2. 10.
1874_스택 수열 ▶실버2 풀이 스택을 사용하는 문제. 예제 1번을 예시로 들면, ① [0]: 4 > 1, 2, 3 ☞ (+): push ② [0]: 4 == 4 ☞ (-): pop ③ [1]: 3 == 3 ☞ (-): pop ④ [2]: 6 > 5 ☞ (+): push ⑤ [2]: 6 == 6 ☞ (-): pop ⑥ [3]: 8 > 7 ☞ (+): push ⑦ [3]: 8 == 8 ☞ (-): pop → n이 될 때까지 진행 따로 스택을 만들어서 그 스택의 top 값과 입력 값으로 주어진 값을 비교한다. 이때, top 값과 같다면 pop top값이 더 크다면 NO를 출력하고 종료한다. 코드 #include #include #include #include #include #include #include using name.. 2023. 2. 8.
1620_나는야 포켓몬 마스터 이다솜 ▶실버4 풀이 문자열과 숫자를 구분하여 탐색해야하기 때문에 생각보다는 까다로운 문제였음! map을 이용하여 인 map 하나, 인 map 하나를 생성하여 번호를 찾을 땐 전자, 이름을 찾을 땐 후자를 이용한다. 이때, m번의 입력을 받는 동안 자료형을 구분할 수 없으므로 string 형태로 일단 받고, 그 문자열의 첫 자가 문자인지 숫자인지 구분 후 진행한다. ※ 참고 문자랑 숫자를 구분할 때, isalpha 함수를 사용했는데 런타임에러가 떴다. 쓰지말기! 코드 #include #include #include #include #include #include #include #include #include #include using namespace std; map number; map name; int m.. 2023. 2. 3.
11279_최대 힙 ▶실버 2 풀이 결론적으로 최댓값을 구하는 것이기 때문에 우선순위 큐를 이용한다. 연산 값이 0이며 우선순위 큐가 empty가 아닐 경우 pop, 연산 값이 양수일 경우 push 코드 #include #include #include #include #include #include using namespace std; priority_queue pq; int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; for (int i = 0; i > x; if (x == 0) { if (pq.empty()) { cout 2023. 2. 3.
10799_쇠막대기 ▶실버2 문제 풀이 stack 이용 '()' => 레이저 제일 위에 있는 막대기는 ')' 가 나오기 전까지 레이저로 자를 수 있음 ※ 막대가 끊겨도 레이저를 쏘면 한 조각으로 치기 때문에 ')' 이 나온다고 해서 무작정 pop하면 안됨 즉, 1 : '('는 push 하고, 2 : ')'일 경우 레이저인지 쇠 막대기인지 확인 후 2-1: 쇠 막대기면 cnt(쇠 막대기의 오른쪽 끝 점 개수) 증가 2-2: 레이저이면 stack의 크기(쇠 막대기의 왼쪽 끝 점 개수)만큼 더한 후, cnt(쇠 막대기의 오른쪽 끝 점 개수) 만큼 pop해준 후 cnt 초기화 3: 반복문 다 돌린 후 마지막으로 cnt 더해 줌 코드 #include #include #include #include #include using name.. 2023. 2. 2.