반응형

BOJ 58

[ C++ ] #10773 제로

입력되는 숫자를 차곡차곡 스택에 넣다가 0이 입력되면 스택에서 하나를 빼는 방식으로 코드를 짜면 쉽게 해결이 될 것 같다. 마지막에는 스택에 있는 값을 모두 더하면 출력값도 쉽게 구할 수 있을 것 같다. #include #include using namespace std; int main() { int K,a,sum=0; cin >> K; stack s; for (int i = 0; i > a; if (a == 0) { s.pop(); } else { s.push(a); } } a = s.size(); for (int i = 0; i < a; i++) { sum += s.top(); s.pop(); } cout

BOJ/[ BOJ ] C++ 2022.12.24

[ C++ ] #10828 스택

어려운문제는 아니다! 하지만 출력을 예제처럼 깔끔하게 하려고 저장해놨다가 출력했더니 계속 틀렸다. 질의응답을 봤더니 다들 그냥 바로 출력했길래 나도 그렇게 했더니 맞았다..ㅎㅎ #include #include #include using namespace std; int main() { int n,b; string a; stack s; int* result = new int[n]; cin >> n; for (int i = 0; i > a; if (a == "push") { cin >> b; s.push(b); }else if(a == "top") { if (s.empty()) cout

BOJ/[ BOJ ] C++ 2022.12.21

[ C++ ] #1158 요세푸스 문제

이 문제는 자료구조를 잘 이용하는 문제인것 같다는 생각이 든다. 정해진 만큼 이동하고 출력하고 삭제하고, 마지막을 만나면 다시 처음으로가고 하면될 것 같다. 알고리즘은 별로 안어려운데 자료구조를 잘 활용해야할 것 같다. list도 이용해봤고 vector도 이용해봤는데 동적으로 계속 사이즈가 변해서 코드를 작성하기 힘들었다. 그래서 배열을 이용해서 해결하였다. 사용완료된 배열에는 숫자대신 -1를 넣어줌으로써 k를 셀때 제외할 수 있도록 하였다. 현재 인덱스 번호가 배열사이즈를 넘는다면 다시 처음으로 돌아가도록 하였다. #include using namespace std; int main() { int a; cin >> a; int* p = new int[a]; //동적할당 for (int i = 0; i ..

BOJ/[ BOJ ] C++ 2022.12.21

[ C++ ] #24416 알고리즘 수업 - 피보나치 수 1

알고리즘시간에 배운 동적프로그래밍 문제를 하나 가져와봤다. 의사코드를 한번 보면 재귀호출은 들어온 숫자(n)이 1이나 2가 아니라면 n-1과 n-2를 인자로 재귀호출하여 더해준다. 만약 6이 들어온다면 f(6) → f(5) + f(4) → ( f(4)+f(3) ) + ( f(3)+f(2) ) → ( ( f(3)+f(2) ) + ( f(2)+f(1) ) ) + ( ( f(2)+f(1) )+1 ) → ( ( ( f(2)+f(1) )+1 ) + ( 1+1 ) ) + ( (1+1 )+1 ) → ( ( ( 1+1 )+1 ) + 2 ) + 3 → 8 동적프로그래밍 의사코드를 보면 인자로 들어온 n만큼 배열을 만들어서 인덱스 1,2, 에는 1을 넣어주고 나머지 인덱스에는 앞에 두자리를 더한 값을 넣어준다. 하지만 '..

BOJ/[ BOJ ] C++ 2022.11.22

[ C++ ] #25305 커트라인

오랜만에 푸는 문제이기 때문에 별로 워밍업이 되지 않을까 하는 문제를 가져왔다 (풀어봐야알겠지만..) 처음에 들어오는 값은 학생 수(N) 이고 두번째 들어오는 값은 상을 받는 사람들(k)일 것이다. 그다음에는 점수들이 쭉 나열이 된다. 점수들을 오름차순으로 저장하고 k등 한 사람을 return 해주면 될 것이다. 점수가 중복이 되면 어떡하지..?라는 고민이 들지만.. 누가 상을 받냐? 가 아니라 점수의 커트라인이 몇이냐 이기 때문에 상관없을 것 같다. list를 이용하여 한번 코드를 짜봐야겠다. 분명 맞게 짠거같은데..게속 결과가 0만 나왔다... k번째까지 출력해봐도 0만 계혹 나왔다. iterator의 오류일까 싶어서 봤지만 아무리 봐도 맞았다. 원인은..! list score(N); 으로 초기화를 ..

BOJ/[ BOJ ] C++ 2022.11.18

[ C++ ] #5397 ( 키로커 )

문제는 그렇게 어렵다고 생각하지 않았지만 리스트를 정의하지 않고 선언한 뒤 리스트의 처음을 가르키는 iterator를 생성하면 어디를 가르킬까?에 대한 의문때문에 내가 답을 납득하는데에 시간이 걸렸다. 결론은 null을 가르킨다는 것이었다. 나는 list L; 이렇게 선언을 했지만 답을 보니 list L={ }; 로 선언을 했다. 나처럼 해도 오답은 아니지만 답 코드를 보니 null이 들어있는 한칸이 만들어지는 것이 아닐까? 하는 발상이 떠올랐다. 그렇게 계산해보고 예제를 넣고 풀어보니 논리가 맞았다. 앞으로 그렇게 생각해야지... #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int fre; ci..

BOJ/[ BOJ ] C++ 2022.02.27

[ C++ ] #3273 ( 두 수의 합 )

한번 동적할당을 하고 이중 포문을 이용해서 코드를 짰는데 시간초과가 났다.. 그래서 두번 공적할당을 하고 합을 구하는 과정에서 시간복잡도를 줄였다.. #include #include using namespace std; int main() { ios::sync_with_stdio(0); cin.tie(nullptr); int num ; int* arr; cin >> num; arr = new int[num]; for (int i = 0; i > arr[i]; int sum=10,fre=0; cin >> sum; int* N = new int[sum+1]; for (int i = 0; i < sum+1; i++) N[i] = 0; for (int i = 0; i < num; ..

BOJ/[ BOJ ] C++ 2022.02.21

[ C++ ] #2577 ( 숫자의 개수 )

어떻게 각 자리 숫자를 확인할까 하다가 몇자리인지 확인하고 그만큼 반복하며 일의자리 수 체크 10으로 나누기를 했다. 하지만 훨 간단한 방법이 있었다. 난 몇번반복하는가에 대하여 고민을 많이 했는데 이를 한번에 해결할 방법이 있었다. 밑에 주석처리 해놨으니 참고하면 될 것 같다. #include #include using namespace std; int main() { int a, b, c,sum; int num[10] = { 0, }; cin >> a >> b >> c; sum = a * b * c; int D=10,B=1; while (sum>D) { D *= 10; B++; } for (int i = 0; i < B; i++) { num[sum % 10]++; sum /= 10; } /* whil..

BOJ/[ BOJ ] C++ 2022.02.20
반응형