728x90
반응형

백준 144

백준, BOJ, 5568번, 카드 놓기 : C++ [CPP]

어렵지 않았다. 다만 머리로 아 어떡하지? 중복제거 어떡하지?? set 생각날 때까지 어려웠다. https://www.acmicpc.net/problem/5568 #맞은 풀이 #include using namespace std; int n,k; set numbers; vector card; bool check[10]; //카드를 고르면서 정수를 만듬. void func(int cnt, string s){ if(cnt == k){ numbers.insert(stoi(s)); //1,3 과 13은 자리를 바꿔도 같은 정수라 중복 제거해야함. //set 이용 return; } for(int i=0; i> n >> k; for(int i=0; i> x; card.push_back(x); } func(0,"");..

백준, BOJ, 1713번, 후보 추천하기 : C++ [CPP]

어렵지 않았다. 그냥 시키는대로만 했다. 다만... tuple을 사용할 때는.. 직접 접근이 아니면 값복사라는 사실을 간과하고 짰다.. 30분 날렸다. ㅎ https://www.acmicpc.net/problem/1713 #맞은 풀이 #include #include #include #include using namespace std; vector frame; int N; int student; bool cmp(tuple& t1, tuple& t2) { if (get(t1) == get(t2)) { if (get(t1) == get(t2)) return get(t1) > get(t2); else return get(t1) < get(t2); } return get(t1) < get(t2); } int ma..

백준, BOJ, 1665번, 가운데를 말해요 : C++ [CPP]

어려웠다. 우선순위 큐를 이렇게 이용한다는 것이 나에겐 조금 어려웠다. 시간을 보아하니 절대로 Brute Force, 전수조사는 아니었다. 힌트를 보고나서야 풀 수 있었다. https://www.acmicpc.net/problem/1655 #맞는 풀이 #include #include using namespace std; int N; priority_queue minH; priority_queue maxH; int main(){ cin.tie(0); ios::sync_with_stdio(0); cin >> N; for(int i = 1; i> x; //min에 넣을지 max에 넣을지?? //한쪽에만 몰아넣으면 안된다. //그렇게 하면 중간값을 바로 알 수 없어서 둘의 사이즈를 항상 차이가 1만큼만 나게 해..

백준, BOJ, 1062번, 가르침 : C++ [CPP]

시간초과가 왜 난지 몰랐지만.. 그냥 나중에 생각해보니 날만했었다. https://www.acmicpc.net/problem/1062 #맞은 풀이 #include #include #include #include using namespace std; bool alpha[26]; int N, K; vector vec; int ans = 0; //idx를 추가시켜서 시간을 단축 시켰다. //여기서 idx는 for문이 시작하는 번호를 말한다. void func(int cnt, int idx) { //K-5개만큼 골랐다면 if (cnt == K-5) { int cnt = 0; //각 단어를 읽을 수 있는지 조사 for (string str : vec){ bool read = true; //만약 모르는 글자가 나오..

백준, BOJ, 2842번, 집배원 한상덕 : C++ [CPP]

사실 어렵다기보다는 생각이 어렵다. 구현은 어렵지 않다. 솔직히 힌트를 얻어서 했지만.. 과연 내가 혼자서 할 수 있을까?? 는 고민이다. https://www.acmicpc.net/problem/2842 #맞은 풀이 #include #include #include //distance를 쓰기 위함 #include using namespace std; const int MAX = 51; const int INF = 987654321; char pos[MAX][MAX]; int height[MAX][MAX]; int visited[MAX][MAX]; int dr[8] = { -1,-1,-1,0,0,1,1,1 }; int dc[8] = { -1,0,1,-1,1,-1,0,1 }; set h; int N; int..

백준, BOJ, 1103번, 게임 : C++ [CPP]

DP는 항상 봐도 이해하고 나야 쉽지..그 전엔 어렵다 https://www.acmicpc.net/problem/1103 #맞은 풀이 #include #include #include using namespace std; const int MAX = 51; int r, c; int dr[4] = { -1,1,0,0 }; int dc[4] = { 0,0,-1,1 }; int ans = 0; //최대 동전 움직인 횟수. bool chkInf = false; int map[MAX][MAX]; int visited[MAX][MAX]; //int finished[MAX][MAX]; int dp[MAX][MAX]; //cr,cc는 위치를 위함 cnt는 동전 움직인 횟수를 위함. void DFS(int cr, int ..

백준, BOJ, 2011번, 암호코드 : C++ [CPP]

물론 이것도 DP 문제다. 왜냐하면.. 경우의 수가 무지막지하게 늘어나기 때문이다. 이런 실버 1문제를 1시간이나 걸리다니... 예외를 찾는게 너무 오래걸렸다. https://www.acmicpc.net/problem/2011 #맞은 풀이 #include #include #include using namespace std; const int DIV = 1000000; string s; long long dp[5001]; int num[5001]; int main() { cin >> s; int length = s.size(); long long ans; //1부터 시작하게 바꿈. for (int i = 0; i < length; i++) { num[i + 1] = s[i] - '0'; //문자열이므로 i..

백준, BOJ, 5557번, 1학년 : C++ [CPP]

솔직히 바로 생각을 못했다. 값을 다 계산해야하나? 싶었다. 하지만 힌트를 보고야 말았으니.. 즉, N개의 수에서 N-1번만 조사하면 되는 것이고 N-1까지의 경우의 수를 구하려면..? N-2에서 N-1번째 원소를 더하거 나 빼는 경우를 세어주면 되었다. https://www.acmicpc.net/problem/5557 #맞은 풀이 #include using namespace std; int N; int arr[101]; long long dp[101][21]; //N번째에 K값이 나오는 경우의 수 int main(){ long long ans; //답의 범위가 2^63-1임 cin >> N; for(int i =1; i> arr[i]; } int target = arr[N]; //초기값 dp[1][ar..

백준, BOJ, 1309번, 동물원 : C++ [CPP]

처음에 감을 못잡았는데.. N-1번째에 사자를 놓느냐 마느냐를 집중했어야 했는데 사자가 1마리 일때, 사자가 2마리 일때, 사자가 3마리 일때의 규칙을 찾으려니까 못찾았다. 나의 실수다. 시간제한을 보니 2초다. 또한 최소 100,000개의 배치를 해야한다. 배열로 만들지 고민했다. https://www.acmicpc.net/problem/1309 #맞는 풀이 #include using namespace std; int N; const int MAX = 100001; int dp[MAX][3]; //120만 바이트 -> 1.2메가정도 int main(){ cin >> N; dp[1][0] = 1; //1번째 줄에 아무것도 놓지 않는 경우 dp[1][1] = 1; //1번째 줄에 왼쪽에 사자를 놓는 경우 ..

백준, BOJ, 2565번, 전깃줄 : C++ [CPP]

증가수열과 비슷하다. 여기서 전깃줄이 겹칠 때 어떨 때 겹칠까 생각해보면 된다. https://www.acmicpc.net/problem/2565 #맞은 풀이 #include #include #include using namespace std; //A가 내가 고르는 것 B가 결과라고 해보자 //내가 고른 것이 이전에 고른 것의 결과보다 작아선 안된다. //다음 것은 내가 고른 것의 결과보다 항상 커야한다. //1번줄을 연결해서 2번줄의 결과를 얻었다면 //2번줄을 연결했을 때 2번보다 작은 결과를 얻어서는 안된다. //내가 순서대로 고르고 결과만 위의 조건에 맞게 하면 되겠다. //-> 전깃줄 순서대로 정렬 //전깃줄을 삭제하는 방법이 아닌 최대의 전깃줄 연결 방법 //-> 최대 5개의 전깃줄을 연결할 ..

728x90
반응형