study/백준
근황
백준 여섯째날
주말은 놀았고, 월요일부터 백준문제 다시 풀이 시작
스터디에서 이번주부터 백준 문제 풀이를 시작해서 하루에 한 문제 풀이는 무사히 지켜나갈 것 같다.
다만 월요일, 화요일 문제 한 번에 기록하는 중...ㅎ
>>> 월요일에 실버문제를 풀었더니 브론즈 2가 되었다. 어서 등급 올리고픔
월요일에는 백준 1436번 문제, 화요일에는 백준 1789번 문제를 풀었다.
1436번 문제는 해석이 난해하더니, 1789번 문제는 통과가 난해했다. 스터디장님 왜 이런 문제를
백준 1436번
> 문제 해석
제일 작은 종말의 숫자는 666이고, 그 다음으로 큰 수는 1666, 2666, 3666, .... 과 같다.
2번째 1666, 3번째 2666, 6번째 5666, 187번째 66666, 500번째 166699
음 네 좋아여, 뭐라구요?
이게 도통 무슨 순서로 666을 기준으로 앞에 숫자가 커졌다 뒤에 숫자가 커졌다 하는지를 이해할 수가 없었다!!!

구글에 백준 1436번 검색하고 내리 두 페이지의 모든 글을 들어가서 설명을 읽어보았다. 그리고 간신히 달거북씨를 이해시켜주는 빛과 소금 같은 블로그를 만났다ㅠㅠ
단순하게 666부터 숫자가 하나씩 커지는 거지면서 666이 들어가는 숫자만 카운팅되어 출력되는 것이었다!!!
즉, 666부터 시작해서 667, 668, 669... 이렇게 숫자가 커지다가 1666에서 한 번 카운팅되고 2666에서 또 한 번 카운팅 되는 식이었다. 이 단순한 걸 너무 어렵게 생각했었나보다.
> 문제 풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int number = 666;
int cnt = 1;
while (cnt != N) {
number++; // 667.. 668.. 669.. ~~ 1666
if (String.valueOf(number).contains("666")) {
cnt++;
}
}
System.out.println(number);
코드도 무척이나 간단하다.
백준 1789번
> 문제 해석
문제 자체는 무척 간단하다.
서로 다른 N개의 자연수의 합이 S이고, S를 알 때 자연수 N의 최댓값은 얼마인지 구하는 문제이다.
N의 최댓값을 구해야 하므로, 합 S를 만들 때 가장 많은 자연수를 이용하는 방법을 찾는다.
즉, 가장 낮은 자연수부터 더해가며 S가 되는 갯수를 찾으면 된다.
> 문제 풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
long S = Long.parseLong(br.readLine());
br.close();
long sum = 0, N = 0;
sum += N;
if(sum>S) {break;}
N++;
}
// S가 200일 때, 1~19까지 더하면 190, 20을 더하면 210이 된다.
// 즉, N은 20일 때 while문을 빠져나오게 되는데, 우리는 200을 만드는 자연수의 갯수를 찾는 중.
// 1~18까지 더한 후 여기에 29를 더하면 200이 되므로 N은 19개이다.
// 따라서 N-1을 출력한다.
bw.write(String.valueOf(N-1));
bw.flush();
bw.close();
}
}
이 문제도 풀이는 간단하다.
그런데!
그런데!!!
백준을 통과를 못했다!!!
13번이나 시도한 흔적...
일단 S와 sum의 타입이 모두 Long 타입이어야 했고, S가 1일 때 N은 1이 나와야 했다.

후^^
백준 다섯째날
정신 차리고 보니 하루가 끝나가고 있어 부랴부랴 쉬운 문제 하나 가져와 풀었다.
꾸준히 해서 캘린더? 그것도 초록색으로 다 칠하고 레벨도 올려야지. 아직은 브론즈 단계
문제 풀이는 마찬가지로 깃허브에~
백준 넷째날
백준 셋째날
무라카미 하루키의 생활습관에 대한 이야기를 들었다.
DB, HTML, CSS 등을 배우면서 자바가 내 생활에서 많이 밀려나있었던 것 같다.
다시 하루 한 문제라도 풀기를 생활 습관으로 만들어야 겠다.
풀이는 깃허브에!