1748번: 수 이어 쓰기 1 (acmicpc.net)
솔직히 이걸 포스팅할지 말지 고민이 잠깐 되었지만 code.plus에 있는 알고리즘 기초 모든 문제를 포스팅하겠다는 것이 나의 야망이기 때문에 일단 하기로 한다. 아직 실골따리 왔다갔다 하는 내가 남에게 PS 훈수를 둘 짬은 아니지만, 인터넷 어딘가에는 브론즈 5 입출력도 막혀서 참담한 심정으로 헤매던 지난해의 나 같은 PS 뉴비들도 있을 것이기 때문이다.
처음 주어지는 수 N의 개수가 최대 100,000,000인 것부터가 대놓고 브루트포스로 하나하나 다 찾아봐도 괜찮아~ 하고 초심자를 위한 힌트를 주는 것이다. 학교 동아리에서 처음 PS를 배울 때도 1억개를 기준으로 브루트포스를 쓸지 말지 정하라고 배웠다. 왜인지는 솔직히 모르겠다. 찾아보고 공부해야 하는데... 암튼 그렇다.
그냥 1부터 시작해서 N까지 하나씩 올려 가며, 해당하는 수(내 코드에서는 num)의 자릿수를 구하고, 다 더하면 끝이다.
import java.io.*;
public class BOJ_1748 {
static int N;
static int digit = 0;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(br.readLine());
br.close();
int num = 1;
while(num<=N){
int tmp = num;
int cnt = 0;
while(tmp!=0){
tmp/=10;
cnt++;
}
digit+=cnt;
num++;
}
bw.write(String.valueOf(digit));
bw.flush();
bw.close();
}
}
다 쓰고 보니 굳이 cnt를 안 쓰고 바로 digit을 1씩 올리는 편이 더 깔끔했을 것 같다.
지난 학기에 들었던 수업이 딱 이런 PS문제를 푸는 방식으로 시험을 봤는데, 지금보다도 코딩을 더 못했던 나는 툭 하면 내가 쓴 코드에서 길을 잃고 헤매었기에 그게 싫어서 굳이 쓸모없는 변수들까지 덕지덕지 tmp, cnt, _copy.. 따위로 선언하는 습관이 들어 버렸다...
Shallow Copy vs Deep Copy를 처음 배울 때 참교육을 많이 당해서 그런 것 같은데... 모르겠다. 이번 건 reference type을 하나도 안 썼는데.
아무튼 오늘의 1일 1백준 미션은 무난히 종료.
'프로그래밍 > 백준 복기' 카테고리의 다른 글
[BruteForce] 백준 1018 : 체스판 다시 칠하기 (0) | 2023.03.02 |
---|---|
[BruteForce] 백준 15652: N과 M(4) (0) | 2022.10.06 |
[BruteForce] 백준 1107: 리모컨 (2) | 2022.10.03 |
[BruteForce] 백준 14500: 테트로미노 (0) | 2022.10.03 |
[BruteForce] 백준 6064: 카잉 달력 (0) | 2022.10.02 |