2765

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main() {
string s;
int b, sum = 0;
cin >> s >> b;
for (int i=s.size()-1; i>=0; i--) {
if (s[i] >= '0' && s[i] <= '9') {
sum += (s[i]-'0')*pow(b,s.size()-1-i);
}
else
{
sum+= (s[i]-'A'+10) * pow(b,s.size()-1-i);
}
}
cout << sum;
return 0;
}
1. 0~9일때와, 알파벳일 때를 구분
2. pow()를 통해 제곱근 설정
3. 아스키 코드때문에 변환 ('0', 'A')
11005

#include <iostream>
#include<algorithm>
using namespace std;
int main() {
int n,b,sum =0;
string s;
cin >> n >> b;
while (n>0)
{
int temp = n%b;
if(temp >= 0 && temp<10)
{
s += (temp+'0');
}
else s += (temp -10 + 'A');
n/=b;
}
reverse(s.begin(),s.end());
cout<< s;
}
temp가 s에 추가될 때, 자동적으로 문자로 변환됨
-> s+=(char)(결과값) 에서 (char)가 생략된 거임
맨 뒤의 자리의 수를 먼저 계산해서 s의 맨 앞에 추가 했기 떄문에
-> reverse()함수를 써서 앞 뒤를 바꿔줘야 정상적인 출력이 가능함.
2720

#include <iostream>
using namespace std;
int main(){
int t = 0;
cin >> t;
for(int i = 0; i < t; i++) {
int change = 0;
cin >> change;
int coins[4];
coins[0] = change / 25;
change %= 25;
coins[1] = change / 10;
change %= 10;
coins[2] = change / 5;
change %= 5;
coins[3] = change / 1;
cout<< coins[0] << " " << coins[1] << " " << coins[2] << " " << coins[3] << " ";
cout << '\n';
}
return 0;
}
나머지와 몫을 구분하는 문제
2903
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int count = 0;
int numDot = 4;
int numSquare = 1;
int numSide = 4;
cin >> count;
for(int i=0; i<count; i++)
{
numSquare = pow(4,i);
numDot = numDot + numSquare + numSide;
numSide = numSquare*4 + numSide*2;
}
cout << numDot;
return 0;
}
규칙 찾는데 조금 걸림
규칙 찾기 + Dot(점)의 업데이트를 square과 side의 사이에 위치하여 update하는 게 관건이었음
2292

#include <iostream>
using namespace std;
int main()
{
int N=0;
int side = 1;
int count = 1;
cin >> N;
while(N>side)
{
side += 6*count;
count++;
}
cout << count;
return 0;
}
-> 의외로 간단한 문제 , 규칙을 나머지와 몫에 집중해서 긴 시간 끌었음.
1193


#include <iostream>
using namespace std;
int main()
{
int N, count = 1;
bool bigI = false;
cin >> N;
int i = 1, j = 1;
while (count < N)
{
if (bigI) {
if (j == 1) {
i++;
bigI=false;
} else {
i++;
j--;
}
} else {
if (i == 1) {
j++;
bigI= true;
} else {
i--;
j++;
}
}
count++;
}
cout << i << "/" << j;
return 0;
}
i가 증가하는 방향과 아닌 방향으로 설정
방향이 꺾이는 타이밍 -> i또는 j가 1일 때 이므로 bool값을 설정
다른 분들의 간단한 코드
#include <iostream>
using namespace std;
int main()
{
int X;
cin >> X;
int i = 1;
while (X > i)
{
X -= i;
i++;
}
if (i % 2 == 0)
cout << X << "/" << i - X + 1;
else
cout << i - X + 1 << "/" << X;
return 0;
}
2869

#include <iostream>
using namespace std;
int main()
{
int a=0, b=0, v=0;
cin >> a >> b >> v;
int day = 0, dis = 0;
while (dis < v)
{
day++;
if(dis + a >= v)
break;
dis += a-b;
}
cout << day;
return 0;
}
-> 시간 초과된 코드, 계속 반복하기 때문에 오래 걸림
-> 이 코드는 chatgpt의 코드
(v-a)/(a-b) +1은 이해가 되는데 (v-b-1) / (a-b)???
#include <iostream>
using namespace std;
int main()
{
int a, b, v;
cin >> a >> b >> v;
int day = (v - b - 1) / (a - b) + 1;
cout << day;
return 0;
}



-> 그렇다고 한다....
이해하기가 매우 어려움
관련 문서
https://stackoverflow.com/questions/2745074/fast-ceiling-of-an-integer-division-in-c-c
'코딩 테스트 > C++' 카테고리의 다른 글
| 백준, C++) 2587, 25305, 2751, 10989, 1427, 11650, 11651, 1181 (0) | 2025.10.10 |
|---|---|
| 백준, C++) 1018, 1436, 2839 (0) | 2025.10.05 |
| 백준, C++) 2798, 2231, 19532 (0) | 2025.10.01 |
| 입출력 시간 초과 해결 (0) | 2025.09.16 |
| 백준, C++) 1978, 2581, 5086 (0) | 2025.04.22 |