본문 바로가기

Algorithm/📖Baekjoon138

#1676 팩토리얼 0의 개수 # 문제 # 입력 및 출력 # 풀이 팩토리얼 계산할때 n이 대략 16 이상부턴 int형 범위를 넘어가게 된다 long long도 500 팩토리얼까진 계산할 수 없기 때문에 string으로 변환해서 계산해줘야한다 string 곱하기, 더하기 연산 코딩하기 귀찮아서 미루다가 오늘 해결했다 #include #include using namespace std; string add(string a, string b) { int size = a.size() < b.size() ? b.size() : a.size(); if (a.size() < b.size()) { for (int i = a.size(); i < size; i++) a = "0" + a; } else { for (int i = b.size(); i .. 2022. 8. 6.
#18352 특정 거리의 도시 찾기 # 문제 # 입력 및 출력 # 풀이 bfs를 사용해서 풀었음 queue에 목적지와 depth를 pair로 저장하고 다음 턴이 되면 depth를 1증가시켜줌 #include #include #include #include using namespace std; vector road[300001]; vector res; // 정답 벡터 queue q; int visit[300001]; int main() { int n, m, k, x; cin >> n >> m >> k >> x; for (int i = 0; i > a >> b; road[a].push_back(b); } q.push(make_pair(x, 0)); visit[x] = 1; while (!q.em.. 2022. 8. 5.
#1449 수리공 항승 # 문제 # 입력 및 출력 # 풀이 #include #include #include using namespace std; vector pipe; int main() { int n, l, p, cnt = 0; cin >> n >> l; for (int i = 0; i > p; pipe.push_back(p); } sort(pipe.begin(), pipe.end()); for (int i = 0; i l; for (int i = 0; i > p;.. 2022. 8. 4.
#1476 날짜 계산 # 문제 # 입력 및 출력 # 풀이 처음엔 최소공배수로 찾아야하나 싶었는데 그냥 하나하나 비교해가면서 찾는게 맞는 것 같아서 무한 반복문으로 해결했음 #include using namespace std; int main() { int e, s, m, te = 1, ts = 1, tm = 1; int year = 1; cin >> e >> s >> m; while (1) { if (te == e && ts == s && tm == m) break; year++; te = ++te > 15 ? te - 15 : te; ts = ++ts > 28 ? ts - 28 : ts; tm = ++tm > 19 ? tm - 19 : tm; } cout 2022. 8. 3.
#6603 로또 # 문제 # 입력 및 출력 # 풀이 스택을 사용하려다가 출력이 불편해서 그냥 배열을 사용했다 로또 숫자를 고를 땐 집합 s에서 현재 보고 있는 숫자보다 큰 인덱스를 가진 숫자만 확인하기 때문에 재귀함수의 매개변수로 인덱스 변수 start를 넘겨줘서 다음에 확인할 숫자의 범위를 설정함 #include using namespace std; int lotto[6]; int s[13]; int k; void print() { // 로또 출력용 함수 for (int i = 0; i s[i]; } for (int i = 0; i 2022. 8. 2.
#4796 캠핑 # 문제 # 입력 및 출력 # 풀이 처음엔 결과 값이 v / p * l + v % p 인 줄 알았는데 v % p 값이 l 보다 큰 경우를 생각하지 못해서 틀렸다 입력이 5 8 22 인 경우를 예를 들어보자 22 / 8 * 5 = 10 22 % 8 = 6 따라서 처음 생각한 식에 대입하면 16이지만 한 턴에 최대 l일 동안만 캠핑장을 사용할 수 있기 때문에 22 % 8 의 값인 6을 더하는 것이 아니라 5를 더해 15가 되어야 한다 즉, 결과 값은 v % p가 l보다 작은 경우엔 v / p * l + v % p v % p가 l보다 큰 경우엔 v / p * l + l 가 된다 #include using namespace std; int main() { int l, p, v, res, i = 1; while .. 2022. 7. 25.