본문 바로가기

반응형

전체 글

1251번 1251번 - 단어 나누기 전체 문자열을 3등분 하기 위해서, 문자열 사이의 두개의 점만 정해주면 3개로 나눌 수 있다. 따라서 2중 for문을 통해서 두개의 위치를 정하고, 마지막 값은 최소 단어 길이가 1인 단어가 나올 수 있도록. 위치가 정해지면, 문자를 거꾸로 저장하여 답을 구한다. 구한 답들을 sort 함수를 통해서 오름차순 정렬하고, 가장 첫번째 값을 출력한다 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include#include#include#includeusing namespace std;vector v;void getWord(int x, int y,string str){ st.. 더보기
2966번 2966번 - 찍기 브루트 포스문제로, 정답을 전부다 비교해보면 된다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include#include#includeusing namespace std;int n;char ans[101];int g[3];vector v(3); int checkAnswer(int p){ int grade = 0; int i = 0; int pos = 0; int size = v[p].front().first.size(); while (i 더보기
1019번 1019번 - 책 페이지 사실 다시 풀어봐야 할 문제 같다. 고민하다 결국 못 풀고, 백준 해설을 보고 이해하고 스스로 풀어봤다. 해설=> http://gooddaytocode.blogspot.kr/2016/05/boj.html 일단 각 자릿수 별로 계산을 한다는 아이디어가 정말 신기하고 놀라웠다. 그러기 위해서 시작점의 끝을 0, 끝나는 점의 끝을 9로 맞춰서 계산하기 간편하게 하는 스킬도 대단했다. 나는 떠올리지 못했을 해법인 거 같다.. 그래서 풀이를 보고, 다시 풀어봤는데, 백준님은 시작점을 1로 놓고, 시작점을 증가시킨느 반면, 나는 시작점을 0으로 놓고 풀었다, 어차피 시작점의 끝을 0으로 맞춰야 하는데, 왜 1로 푸는걸까? 라는 생각을 하면서.. 근데 풀다보니, 계속 틀린값이 나왔다.. 그래.. 더보기
1748번 1748번 - 수 이어쓰기 1 그냥 재귀함수를 통해서 답을 구했다. go 함수는 1~9 까지는 각 한 자리씩 해서 더하고,10~99 까지는 각 두자리씩 해서 더하고,100~999까지는 각 세자리씩 해서 더하고.. 이런식으로 문제를 해결했다. 1234567891011121314151617181920212223242526272829#include using namespace std;int ans = 0;void go(int a,int b,int c,int n){ if (n = a) { ans += c*(a - b); a *= 10; b *= 10; go(a, b, c + 1, n); }}int main(){ int n; scanf("%d", &n); go(10,1,1,n); printf("%d\n", ans.. 더보기
1038번 1038번 - 감소하는 수 처음에는 0부터 9876543210 까지 모든 숫자를 감소하는 숫자인지 탐색해보려고 했다. 생각해보니 9876543210 은 엄청나게 큰 수여서 시간제한 안에 들어올 수 없었다. DP로도 어떻게 식을 세워야할지 도저히 감이 안 잡혔다.. 그래서 다른 분 코드를 보고 이해를 했다.. 내 생각에 갇혀서 문제를 풀지 못한 것 같다.. 재귀함수를 통해서 맨 앞에서 부터 수를 만들어주는 과정으로 문제를 풀 수 있었다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include#include#includeusing namespace std;vector v; void go(l.. 더보기
1213번 1213번 - 팰린드롬 만들기 우선 입력받은 문자열 크기가 홀수인지 짝수인지 먼저 판단했다. -홀수라면 , 팰린드롬을 만들기 위해서 홀수인 알파벳 수가 무조건 1개 있어야 한다.-짝수라면, 팰린드롬을 만들기 위해서 홀수 인 수가 있어서는 안된다. 위의 두 식을 통해서 일단, 팰린드롬이 생성되지 않는 경우를 차단했다. 그 다음에 makePal 함수를 통해서 A부터 차근차근 앞에서 채워서 반절을 만들어 냈다. 이때 만약 문자열 크기가 홀수라면, 홀 수 갯수를 가운데에 넣어주고, 그렇지 않다면 반절을 리버스 한걸 합해서 정답 코드를 출력해냈다. 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051.. 더보기
2503번 2503번 - 숫자 야구 생각보다 굉장히 까다로웠던 문제였다..나에겐.. 처음에는 어떤 방식으로 풀어야 좋을까 굉장히 생각했다...그런데 생각보다 쉽지 않았다.. 그런데 숫자가 3자리까지 밖에 되지 않기 때문에, 완전탐색이 가능하다는 걸 뒤늦게 깨달았다. 그래서 완전탐색으로 문제를 풀었다.. 근데 50퍼센트에서 계속 틀려서.. 질문 게시판을 봤다 봤더니.. Strike=0 ,Ball =0 일때를 생각하지 못하고 풀었다가 50퍼센트에서 계속 틀렸다.. 그리고 분명 숫자 1~9를 쓴다고 했는데, 그걸 못보고 0이 들어있는 숫자를 계속 카운트해서 또 틀렸다.. 문제 출처가 초등부 문제라 약간 자만했는데.. 까다로운 처리가 있었다.. 1234567891011121314151617181920212223242526.. 더보기
3085번 3085번 - 사탕 게임 완전 탐색을 통해서 문제를 풀었다. 두점을 바꾼 새로운 맵을 구하는 함수 - select 함수 새로운 맵에서 가로(행) , 세로(열) 을 탐색하면서 최대값을 찾는 함수 - search 그리고 중복해서 탐색되는 값을 없애기 위해서 오른쪽과 아래만 찾아가면서 select 함수를 호출했다. 어차피 2중 for문을 통해서 오른쪽 먼저, 그 다음 아래로 움직이기 때문이다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394.. 더보기

반응형