Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- baekjoon problem solving
- 정렬
- 백준
- mit
- 자료구조
- HJB방정식
- 로보틱스
- 최적제어
- 문자열
- 6.042j
- 수학
- 대수경
- lqr
- 텔레스코픽로봇
- 다리로봇
- BOJ
- 논문리뷰
- std::sort
- LeggedRobot
- C++
- 실버 4
- mathematics for computer science
- 집합과 맵
- 로봇공학
- MIT opencourse
- 실버 5
- 전국 대학생 수학 경시대회
- 구현
- baekjoon
- 큐
Archives
- Today
- Total
서두르지 말고 쉬지 말자
백준 1436번 영화감독 숌(C++) 본문
문제 해결 전략 : 1부터 1000000차례대로 666이 들어있는지 조사해서 N번째 666을 찾으면 출력하고 루프문을 벗어나서 프로그램 종료하게 만들었음
문제 해결 소감 : 메모리 초과 이슈가 처음 발생함, 메모리도 신경써야겠다는 생각이 들었음, 메모리 이슈 해결이 생각이 안나서 gpt의 도움을 받았다. 모든 수 스트링을 vector에 저장해놓지 않고 반복이 한번 끝나면 같은 메모리에 다른 값을 할당시키는 것으로 메모리 사용을 줄였다.
#include <iostream>
#include <vector>
#include <string>
using std::string;
using std::vector;
/*
x666 9
666x 10
xx666 90
x666x 90 199개
이 4가지 경우밖에 없네 별로 없으니가 brute force
*/
int N = 0;
int n = 0;
vector<string> v;
int main(void)
{
std::cin >> N;
for (int i = 0; i < 10000000; i++) // 666xxxx
{
v.push_back(std::to_string(i + 1)); // 1부터 9999까지 채우기
}
// 666이 들어가 있으면 카운트
for (auto i : v)
{
if (i.find("666") != string::npos)
{
n++;
}
if (n == N)
{
std::cout << i;
break;
}
}
return 0;
}
에러 난 이유 : 메모리 초과, 벡터를 선언하고 각 베터마다 string을 일일이 저장해놓는 방힉이라 메모리를 많이 잡아 먹었음
#include <iostream>
#include <string>
using std::string;
int main()
{
int N, n = 0;
std::cin >> N;
for (int i = 0;; ++i)
{ // 숫자를 하나씩 처리
string num = std::to_string(i);
if (num.find("666") != string::npos)
{
n++;
}
if (n == N)
{
std::cout << num << std::endl;
break;
}
}
return 0;
}
에러 해결 방법: vector에 모든 수 string을 할당하지 않고 매 루프마다 메모리를 재활용함
반응형
'코딩 공부 > Baekjoon Problem Solving' 카테고리의 다른 글
| 백준 1181번 단어 정렬[C++] (2) | 2025.01.13 |
|---|---|
| 백준 1018번 체스판 다시 칠하기(C++) (3) | 2025.01.07 |
| 백준 3052번 나머지(C++) (1) | 2024.11.22 |
| 백준 11720번 숫자의 합(C++) (1) | 2024.07.10 |
| 백준 2738번 행렬 덧셈(C++) (0) | 2024.05.25 |
