일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 9996
- 자료구조
- 2623
- 백준
- 적두트리
- 구슬탈출
- TDD
- 데이터 링크 계층
- 3XN 타일링
- RBT
- 백준 2133
- 페이지교체알고리즘
- tfjs
- TDD란?
- 13459
- REACT
- WebRTC란
- mediastream
- 메모리계층
- c++
- ESP32
- 풀이
- stl
- OpenVidu
- 테스트주도개발
- 1796
- LOLIN D32
- Vite 사용 이유
- dp
- 구현
- Today
- Total
그냥 블로그
[C++/백준] Solved.ac 2단계 본문
[solved.ac 2단계 모음집]
https://www.acmicpc.net/group/workbook/view/20371/71152
알고리즘을 조금씩 꾸준히 풀면서 항상 기초가 부족하다고 느꼈다.
일단, 새로운 유형의 알고리즘 유형을 봐도 외우지 않고 양치기로 해결하려고 하는 느낌이 있고,
문법을 잘 몰라서 써칭해본적도 많다...
그래서 좀 방향을 바꿔서 기본부터 차근차근 올라가기 위해서 solved.ac 2단계부터 6단계까지 모두 부수기를 진행하려고 한다..!!
물론 그 과정에서 지켜야하는 몇 가지가
매일 써칭하는 문법 ( cstring...애들... )은 찾아보고 정리 + 외워버리기
알고리즘 대표 유형 코드는 외우기. 툭 치면 툭 나와야한다.
MST, 위상 행렬, 플로이드 워셜 같이 알고있는데 좀 생각해야 나오는 알고리즘들 다 외우기
다른 사람들 코드를 최소 2개 참고하기 ( 쉬운 문제도 포함 )
2단계에서는 크게 헷갈리는 문제가 없을 것 같아서 무조건 20분 내로 풀어야 하는 걸로 잡았다.
헷갈리는 개념만 정리하고 일요일에 외우도록 하는걸로.
#include<algorithm> reverse(v.begin(), v.end())
주소값을 넣어서 사용할 수 있고, algorithm 헤더 파일임. 팰린드롬 풀면서 썼는데 cstring 내에 있는게 아니었음.
문자열의 경우 주소값은 s.begin(), s.end()를 쓸 수 있고 (&s[0], &s[0]+ s.length()) 이렇게 가능함.
주소로 접근하려고 &s, &s+len 이런식으로 했는데 오류가 났었음. :(
영화 감독 숌
https://www.acmicpc.net/problem/1436
실버 5 영화 감독 숌... 실버 5인데 못 풀어서 진짜 당황 스러웠다 ㅋㅋㅋㅋㅋ 결국엔 써칭으로 해결. 아무리 머리 쥐어짰어도 못 풀었을 거 같다.
뭔가 DP나 이런 쪽으로 생각도 했는데 왠지 실버 5니까 DP는 아닐거 같고 무조건 완탐인데~ 했다.
알고리즘 풀이나 시간 최적화 같은걸 너무 신경쓰다보니까 아예 숫자 666부터 계속 올라가면서 찾는다? 는 생각을 못하게 된 것.
요즘 브루트 포스가 좀 약점인 거 같다. 요행 부리다가...
-> 티어 낮은 문제를 많이 풀어봐야 겠다는 생각이 굉장히~~ 많이 든다!
나는 앞 뒤로 막 숫자를 붙이는 규칙을 찾아서 풀었는데 이렇게 하면 규칙 세우기가 상당히 까다롭다. 실제로 내가 했던건 나오지도 않았음.
좀 더 단순하게도 생각할 줄 알아야하는데 ...
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<queue>
#include<map>
using namespace std;
int N;
map<int, int> MAP;
vector <int> v;
int _sum[100];
void push_num(int next) {
if (MAP[next])
return;
v.push_back(next);
MAP[next] = 1;
}
int main() {
cin >> N;
int num = 666;
int cnt = 1;
while (cnt<N) {
num++;
string s_num = to_string(num);
if (s_num.find("666") != -1) {
cnt++;
}
}
cout << num;
}
#include<string> string.find("find_string"!==-1)
string이 항상 약한데.. 문자열을 잘 안풀어서 그렇다.
string.find("")!=-1 또는 string.find("")!=string::npos 이렇게 하면 그 내부에 있는지 없는지 확인할 수 있다. 없ㄷㅏ면 string::npos(=-1)을 리턴하는 것.
찾았다면 시작 위치를 출력한다.
랜선 자르기
https://www.acmicpc.net/problem/1654
투포인터 문제였다. 문제 접근 자체는 쉬웠는데, 몇 가지 놓쳐서 두 번 틀렸었다. (이전에 풀어본 듯?)
1. 길이 최대 값이 2^31-1 인데 int로 할당함 .
2. s = 1에서 시작. s를 0에서 시작해서 division by zero가 발생했다. 이 오류를 보자마자 바로 잡긴 했는데 앞으로는 투포인터 문제에서 중간에 나누기가 들어가면 s를 0으로 하는 오류를 범하지 말자...
통계학
https://www.acmicpc.net/problem/2108
간단한 산수 문제였다. 여기에 반올림이 나왔는데, 나는 코드로 구현했음. 하지만... cmath 메서드를 알았으면 더 좋았을 듯.
#include<cmath>
- round() : 반올림
- floor() : 내림
- ceil() : 올림
자료형 변환 시키는 과정에서도 문제가 있었다. double(int/int) 이렇게 했기 때문에 이미 내부에서 int 연산이 일어났고, 소수점이 나오지 않은 것.
(double)n/int 이런식으로 한 수에 double 형을 섞어주면 원하는대로 얻을 수 있다.
'C++ > 백준' 카테고리의 다른 글
[C++/백준] 23326 홍익 투어리스트 (0) | 2024.08.12 |
---|---|
[C++/백준] Solved.ac 3단계 실수 모음 (1) | 2024.07.17 |
[C++/백준] 17136 색종이 붙이기 (0) | 2024.07.07 |
[C++/백준] 흙길 보수하기 (0) | 2024.07.07 |
[C++/백준] 1486 등산 (0) | 2024.05.12 |