백준
[1388] 바닥 장식(C++)
문제 바로가기 형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나무 판자는 크기 1의 너비를 가졌고, 양수의 길이를 가지고 있다. 기훈이 방은 직사각형 모양이고, 방 안에는 벽과 평행한 모양의 정사각형으로 나누어져 있다. 이제 ‘-’와 ‘|’로 이루어진 바닥 장식 모양이 주어진다. 만약 두 개의 ‘-’가 인접해 있고, 같은 행에 있다면, 두 개는 같은 나무 판자이고, 두 개의 ‘|’가 인접해 있고, 같은 열에 있다면, 두 개는 같은 나무 판자이다. 기훈이의 방 바닥을 장식하는데 필요한 나무 판자의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 방 바닥의 세로 크..
[2470] 두 용액(C++)
문제 바로가기 KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다. 같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 예를 들어, 주어진 용액들의 특성값이 [-2, 4, -99, -1, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고,..
[1966] 프린터 큐
문제 바로가기 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 1. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 2. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 ..
[10974] 모든 순열(C++)
문제 바로가기 N이 주어졌을 때, 1부터 N까지의 수로 이루어진 순열을 사전순으로 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 N(1 ≤ N ≤ 8)이 주어진다. 출력 첫째 줄부터 N!개의 줄에 걸쳐서 모든 순열을 사전순으로 출력한다. 해결 방법 내 코드 // [10974] 모든 순열 // 브루트포스, 백트래킹 #include using namespace std; bool visited[8]; int n, arr[8], tmpArr[8]; void dfs(int idx, int depth) { if(depth == n) { for(int i = 0; i < n; i++) { cout
[20291] 파일 정리
🌿 문제 [20291] 파일 정리 🌿 해결 방법 이 문제의 핵심은 파일 이름은 필요없고 오로지 '.' 뒤의 확장자만 필요하다는 것. 그래서 입력을 받을 때부터 전체 파일명을 전체 저장할 필요없이 확장자만 저장하면 된다. string 으로 파일명을 입력받으면 확장자를 한번에 빠르게 구할 수 있는데, 먼저 find 함수를 사용해서 '.'이 몇번째 인덱스에 있는지 찾는다. s.find(".") 그 다음 substr 함수를 사용해서 '.' 이후의 문자열을 한번에 구한다. s.substr(s.find(".")+1) 이렇게 확장자를 구했으면 map에다가 차례대로 저장해주면 된다. map은 key값을 기준으로 자동 정렬이 되어있는데 그걸 깜빡하고 벡터를 추가한뒤에 또 정렬을 하느라 시간, 메모리 모두 엄청나게 나왔었..
[17413] 단어 뒤집기2
🌿 문제 [17413] 단어 뒤집기2 🌿 해결 방법 경우는 크게 3가지로 나누어서 보면 된다. ''를 만날 때까지 나오는 모든 소문자, 공백, 숫자를 그대로 출력한다. 두번째 경우는 단어 하나가 끝났다는 뜻이기 때문에 스택을 점검하고 비어있지 않다면 모두 출력해준다. 세번째 경우는 그냥 스택에 바로 추가한다. 마지막으로 스택이 비어있는지 다시 한번 확인한 후, 남아있는 문자가 있다면 출력해준다.(마지막 단어) 한 가지 주의할 부분은 입력 문자 s에 공백이 있을 수 있기 때문에 getline을 통해 반드시 공백을 포함해서 입력받아야 한다. 🌿 내 코드 // [17413] 단어 뒤집기2 // 구현, 문자열, 스택 #include #include using namespace std; stack wordStac..
[13023] ABCDE(C++)
문제 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 내 코드 // [13023] ABCDE #include #include #include using namespace std; bool visited[2001]; vector friendsInfo[2001]; void dfs(int x, int depth) { if(depth == 4) { cout > n >> m; for(int i = 0; i > a >> b; friendsInfo[a].push_back(b); friendsInfo[b].push_back(a); } for(int i = 0; i < n; i++) { memset(v..
[1707] 이분 그래프(C++)
문제 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 내 코드 // [1707] 이분 그래프 // https://www.acmicpc.net/problem/1707 // 그래프, dfs, bfs #include #include #include #include using namespace std; vector list[200001]; int visited[200001], v; bool ans = true; void bipartite(int start) { queue q; visited[start] = 1; q...