코드업 기초 100제 1019 (3)
업데이트:
[1019] 연월일 입력받아 그대로 출력하기
[입력] 2013.8.5
[출력] 2013.08.05
//이거 틀린 코드이니 자세하게 보지마세요,,
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String date = sc.nextLine();
char a = '0';
int secondDot = 0;
int year = 0, month = 0, day = 0;
for (int i = 0; i < date.length(); i++) {
a = date.charAt(i);
if (i > 4 && a == '.') {
secondDot = i;
}
}
for (int i = 0; i < date.length(); i++) {
a = date.charAt(i);
if (i <= 3) {
if (i == 0) {
year += (a - '0') * 1000;
} else if (i == 1) {
year += (a - '0') * 100;
} else if (i == 2) {
year += (a - '0') * 10;
} else {
year += (a - '0') * 1;
}
}
if (i > 4 && i < secondDot) {
if (secondDot == 6) {
month = a - '0';
}
if (secondDot != 6) {
if (i == 5) {
month += (a - '0') * 10;
} else {
month += (a - '0') * 1;
}
}
}
if (i > secondDot && a != '.') {
if (date.length() - secondDot == 2) {
day = a - '0';
} else {
if (i - secondDot == 1) {
day += (a - '0') * 10;
} else {
day += (a - '0') * 1;
}
}
}
}
if (month >= 10 && day >= 10)
System.out.printf("%d.%d.%d", year, month, day);
else if (month < 10 && day >= 10)
System.out.printf("%d.0%d.%d", year, month, day);
else if (month < 10 && day < 10)
System.out.printf("%d.0%d.0%d", year, month, day);
else
System.out.printf("%d.%d.0%d", year, month, day);
}
}
일단 장황한 코드에도 불구하고 결과를 말해보자면 틀렸다. 테스트 케이스 자체가 yyyy.m.d
dl이 형식에서 바뀌어봤자 월, 일 부분만 바뀌는 줄 알았는데 생각지도 못한 yy.mm.dd
에 당황X1000
이렇게 위 사진처럼 돌아가서 뿌듯함에 취했을 때,, 제출을 눌러보니,,
secondDot처럼 firstDot 값을 구해 정답을 맞추고 싶었지만 정처기 때문에 시간이 없어서 결국 답을 보기로 했다. 그래도 57점이나 맞은게 어디야,,
아래는 정답 코드다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a = sc.next();
String[] arr = a.split("\\.");
int A = Integer.valueOf(arr[0]);
int B = Integer.valueOf(arr[1]);
int C = Integer.valueOf(arr[2]);
System.out.printf("%04d.%02d.%02d", A, B, C);
}
}
정답을 보고 정말 놀라지 않을 수가 없다,, 나는 어차피 ‘yyyy.m.d’ 형식이랑 비슷할테니 아예 첫 번째 닷(.)은 필수적으로 i = 0
이라는 전제 하에 네 번째에 올테니, i가 0 ~ 3일때 하나하나 처리해주고,month를 구할 때도 이와 비슷하게 구했는데 저렇게 간단한 방법이 있었을 줄이야,, 아무래도 코딩 머리는 아닌걸지도 몰라,,
일단 정답 코드를 보면 split()
이 눈에 띄어서 찾아봤더니 split
은 괄호 안에 있는 정규 표현식 기준으로 부분 문자열
을 추출해줘서 일단 String 타입 배열 arr에 분리된 문자열을 넣은 후, int 타입 A, B, C 변수에 형변환으로 분리된 문자열 들을 넣고 간단하게 서식 문자열
로 yyyy.mm.dd
의 형식을 맞춰주었다. 참고로 split 괄호 안에 \\.
이 값이 들어간 이유는 .(dot)은 예약어
라 \
를 붙이고, \
역시 예약어라 두 개를 붙이면 .(dot)을 이용해 split 메소드를 사용할 수 있다.
답을 보고 나니 나의 코드가 너무 부끄럽지만 그래도 나중엔 다 밑거름이 되겠지,,
댓글남기기