Problem Solving

[Problem Solving] 250420 문제 풀이 기록

최나무🌈 2025. 4. 20. 17:56

오늘도 B2 50문제 (많이 푼 순서대로 첫 150~200문제)를 풀어 보았다. 이제부터는 영어 문제가 조금씩 섞여 있어서 번역하느냐 조금 애를 먹었다. 몇몇 개 재밌는 문제들을 5문제 정도 추려서 정리해본다.

 

[1] 지수 연산 (BOJ 2052) : 수가 매우 크기 때문에 C++보다는 파이썬을 이용해서 구현하는 것을 권장한다. 분모, 분자에 5^n을 곱하면 답은 5^n/10^n 꼴이 된다는 것을 알 수 있고 5^n을 먼저 계산한 다음에 소수점 아래 자릿수를 맞춰서 출력해주면 된다.

n = int(input()) 
s = str(5**n) 
diff = n - len(s) 
for _ in range(diff): 
    s = "0" + s 
print("0." + s)

 

[2] 문어 (BOJ 21313) : B2에서 오랜만에 본 해 구성하기 문제여서 재밌게 풀었다. 기우성에 따라서 해가 달라진다는 것을 알 수 있다. N이 짝수인 경우 1, 2, . . .를 번갈아가면서 출력해주면 되고 N이 홀수인 경우 첫 번째 문어는 이미 1번 손을 사용했으므로 1, 2, . . .를 번갈아가다가 마지막에 3을 출력해주면 된다.

# include <bits/stdc++.h> 
using namespace std; 

int n; 

int main(void){
    cin >> n; 
    if(n%2 == 0){
        for(int i=0;i<n;i++){
            cout << (i%2 ? 2 : 1) << " "; 
        }
    }
    else{
        for(int i=0;i<n;i++){
            if(i == n - 1) cout << 3 << " "; 
            else cout << (i%2 ? 2 : 1) << " "; 
        }
    }
}

 

[3] 캔디 구매 (BOJ 2909) : 반올림 여부를 고려하면 m = 10^k라고 할 때 c/m * m와 (c/m + 1) * m 중에 하나가 답이 됨을 관찰할 수 있다.

# include <bits/stdc++.h> 
using namespace std; 

int c, k, m, res; 

int main(void){
    cin >> c >> k; 
    m = pow(10, k); 
    res = c / m * m; 
    if(c % m * 2 >= m) res += m; 
    cout << res; 
}

 

[4] 전북대학교 (BOJ 14624) : n이 홀수인 경우에 ㅈ 모양으로 별 찍기를 하는 문제이다.

# include <bits/stdc++.h> 
using namespace std; 

int n; 

void f(int idx, int sp){
    if(idx == -1) return; 
    for(int i=0;i<idx;i++) cout << " "; 
    cout << "*"; 
    for(int i=0;i<sp;i++) cout << " "; 
    cout << "*\n"; 
    f(idx - 1, sp + 2); 
}

int main(void){
    cin >> n; 
    if(n%2 == 0){
        cout << "I LOVE CBNU\n"; 
        return 0; 
    }
    for(int i=0;i<n;i++) cout << "*"; cout << "\n"; 
    int mid = n / 2; 
    for(int i=0;i<mid;i++) cout << " "; cout << "*\n"; 
    f(mid - 1, 1); 
}

 

[5] 끝말잇기 (BOJ 20528) : B2에서 오랜만에 만난 애드혹 문제라서 재밌게 풀었다. 팰린드롬만을 이용해서 끝말잇기를 할 경우 주어진 단어들의 첫 글자가 모두 같아야 한다는 점을 관찰하면 쉽게 해결할 수 있다.

# include <bits/stdc++.h> 
using namespace std; 

int n; 
string s; 
set <char> st; 

int main(void){
    cin >> n; 
    while(cin >> s) st.insert(s[0]); 
    cout << (st.size() == 1); 
}