목록분류 전체보기 (370)
GitHubSeob

문제 https://school.programmers.co.kr/learn/courses/30/lessons/77885 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 처음엔 bitset, xor연산을 이용해서 구하려 했는데 테스트케이스 10, 11번에서 시간초과가 떠서 방법을 바꿨다. 최하위 비트에서부터 시작해서 0인 자리를 찾고 0인 자리와 그 아래 자리의 비트를 반전시키면 된다. 주어지는 숫자의 최대값은 10^15 이기 때문에 넉넉하게 bitset을 60자리로 표현하였다. for (int idx = 0; idx < 60; ++idx) { if..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12900 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 백준에도 똑같은 문제가 있다. https://www.acmicpc.net/problem/11726 타일의 높이는 2로 고정되어 있고 블록은 가로, 세로 두 가지가 있다. 블록은 1x2, 2x1 이렇게 있으므로 두 가지를 생각하면 된다. -1칸에서 세로로 블록을 채운 가짓수, -2칸에서 가로로 블록을 채운 가짓수를 더하면 된다. -2칸에서 세로로 블록을 채운 경우는 -1칸에서 세로로 ..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 DP를 이용해 풀었다. 1부터 y까지 사용할 것이기 때문에 y + 1의 크기만큼 벡터를 선언한다. x를 y까지 1씩 더하면서 반복문을 돌린다. DP [x + n]이 DP [x] + 1보다 크다면 DP [x + n] = DP [x] + 1이 된다. x에서 n을 더하면 x + n이 되므로 x칸 도달 횟수에 +1을 한 값이 DP [x + n] 이 된다. x는 x부터 y까지이므로 INF를..

문제 https://school.programmers.co.kr/learn/courses/30/lessons/132265 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제풀이 토핑의 개수는 상관없이 종류의 개수만 따지면 된다. 먼저 토핑 벡터를 탐색하면서 토핑 종류와 개수를 저장하는 map에 토핑 종류별 개수를 저장한다. 위 반복문이 종료됐으면 다시 반복문을 통해 토핑벡터를 탐색한다. 형 토핑을 저장하는 map에 토핑을 추가하고, 전체 토핑에서 현재 토핑의 개수를 한 개 없앤다. 만약 0개라면 erase를 통해 map에서 지운다. 형 map의 크기와 전..

문제 https://www.acmicpc.net/problem/1766 1766번: 문제집 첫째 줄에 문제의 수 N(1 ≤ N ≤ 32,000)과 먼저 푸는 것이 좋은 문제에 대한 정보의 개수 M(1 ≤ M ≤ 100,000)이 주어진다. 둘째 줄부터 M개의 줄에 걸쳐 두 정수의 순서쌍 A,B가 빈칸을 사이에 두고 주 www.acmicpc.net 문제풀이 위상정렬 + 우선순위 큐 문제이다. 먼저 풀어야 되는 문제가 있으면 먼저 풀어야 한다. 현재 풀 수 있는 문제가 여러 개라면 번호가 낮은 문제 먼저 풀어야 한다. 위상정렬에서 queue를 쓰는 대신 priority_queue를 사용하면 문제를 쉽게 해결할 수 있다. 코드 #include using namespace std; priority_queuepq..

문제 https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 문제풀이 위상정렬을 이용하여 풀었다. 진입차수 벡터를 만들어 진입차수가 0인 노드를 큐에 집어넣는다. 큐에서 pop을 하면서 해당 노드에서 다른 노드로 가는 간선들의 개수를 제거한다. 제거하는 도중, 다른 노드의 진입 차수가 0인 다른 노드가 있으면 큐에 집어넣는다. 노드 개수만큼 반복이 되지 않으면 사이클이 존재한다는 의미인데, 문제에서 A가 B앞..

문제 https://www.acmicpc.net/problem/19585 19585번: 전설 Sogang ICPC Team에는 색상 이름과 닉네임의 순서로 이여서 팀명을 지으면 ICPC 리저널에서 수상할 수 있다는 전설이 있다. 색상 이름들과 닉네임들이 주어질 때, Q개의 팀에 대해 다음 리저널에서 수 www.acmicpc.net 문제풀이 색상은 트라이, 닉네임은 set을 이용해 풀었다. 처음에는 둘 다 해시로 풀어서 안되길래 라빈카프로 바꿔서 풀어봤는데도 안 됐다. 그래서 트라이 + 해시로 풀어봤는데 15%에서 계속 틀리길래 검색을 해봤는데 반례가 하나도 없길래 직접 생각해 봤다. 처음에는 트라이로 검색해 나가면서 isEnd가 true이면 break를 통해 색상은 더 이상 찾지 않고 나머지 문자열이 닉..

문제 https://www.acmicpc.net/problem/9202 9202번: Boggle 각각의 Boggle에 대해, 얻을 수 있는 최대 점수, 가장 긴 단어, 찾은 단어의 개수를 출력한다. 한 Boggle에서 같은 단어를 여러 번 찾은 경우에는 한 번만 찾은 것으로 센다. 가장 긴 단어가 여러 개 www.acmicpc.net 문제풀이 트라이 + DFS(백트래킹)로 풀었다. 입력이 들어오면 문자열들을 트라이로 구성한다. 그다음 DFS로 모든 경우의 수를 따지면 된다. unordered_setdict; unordered_settarget; int max_score; string max_str; vectorboard; vectorvisited; int dy[8] = { -1,-1,-1,0,0,1,1,..

문제 https://www.acmicpc.net/problem/5670 5670번: 휴대폰 자판 휴대폰에서 길이가 P인 영단어를 입력하려면 버튼을 P번 눌러야 한다. 그러나 시스템프로그래밍 연구실에 근무하는 승혁연구원은 사전을 사용해 이 입력을 더 빨리 할 수 있는 자판 모듈을 개발 www.acmicpc.net 문제풀이 트라이 문제이다. 첫 글자를 제외하고 전 글자와 연결되는 이번 글자가 하나뿐이라면 버튼 입력 없이 자동으로 입력해 준다. 모든 단어를 입력할 때 버튼을 총 몇 번 눌러야 되는지를 단어 개수로 나누어 소수점 둘째 자리까지 출력하면 된다. 문제를 풀면서 메모리 초과와 출력 초과를 겪었다. 메모리 초과문제는 테스트케이스가 여러 개이기 때문에 한 테스트케이가 끝나면 소멸자를 통해 delete를 ..