2주차 팀 스터디를 마치고, 마지막 테스트였습니다.
문제는 2가지가 주어졌고, 그중 가장 쉬웠던 문제를 선택하였습니다.
문제의 내용은
1. "1012345678"로 저장되어 있는 것을 앞에 "0"을 더합니다.
2. "01012345678"에서 "010-1234-5678"으로 번호에 하이폰"-"을 넣어주는 문제입니다.
public class Main {
public String solution(String phone) {
String answer = "";
String addnum = "0";
String num = addnum + phone; //@1
char hip = '-'; //@2
// 01062509911
answer = num.substring(0, 3) + hip +num.substring(3,7)+ hip +num.substring(7,11);
return answer; //@3
}
public static void main(String[] args) {
Main method = new Main();
System.out.println(method.solution("1062509911"));
}
}
@1 : addnum 이라는 변수를 만들어 "0" 문자를 대입 한 뒤 -> num이라는 변수에 "0" + "전화번호"
@2 : 문자열은 char이기 때문에 hip이라는 변수에 '-'를 대입하였습니다.
(char은 ""큰 따옴표가 아닌 ''작은 따옴표만 인식합니다.)
@3 : Substring 함수를 활용하여 num.substring(start, end)을 대입하였습니다.
"01012345678"에서 end는 값에서 end-1번째 숫자까지 출력이 된다.
이를 활용하여 각각 (0,3)(3,7)(7,11)사이에 '+'를 더하면 값을 통하여 "010"+'-'+"1234"+'-'+"5678"를
하면 "010-2111-3326"이 됩니다.
<Substring>
https://coding-factory.tistory.com/126
<자바에서의 ""와 ''차이>
<조원분의 코드>
public String solution(String phone) {
String answer = "";
String phonenumber = "0"+phone;
return phonenumber.replaceAll("(^02|[0-9]{3})([0-9]{3,4})([0-9]{4})$", "$1-$2-$3");
}
현상님께서 정규식을 이용한 코드입니다.
replaceAll은 "정규 표현식"을 이용할 때 사용합니다. -> replace : 대상 문자열을 원하는 문자로 변환하는 함수
phonenumber 까지는 동일한 방식으로 "01062509911"이 나옵니다.
이후 정규식을 이용하여 문자열사이에 하이폰'-'을 추가해줘야 합니다.
<사용된 정규식 문법>
1. "" : 문자열에서
2. () : 소괄호 안의 하나의 문자
3. ^ : 문자열 시작
4. | : 패턴 안에서 or연산 ->
02|를 사용한 이유 -> 처음 010부분이 아닌 070이나 031같은 번호에도 사용할 수 있도록 고안 해 보았다고 하네요.
5. [] : 문자의 집단이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 정함
6. {} : 횟수 또는 범위를 나타냄
7. $ : 문자열 종료
<정규식 해석해보기>
"(^02|[0-9]{3})([0-9]{3,4})([0-9]{4})$", "$1-$2-$3"
""문자열에서 -> 하나의 문자가 -> 02 또는 [0-9]즉 숫자인 문자열에서 -> {3} 3자리 -> 010
-> 하나의 문자가 -> [0-9]즉 숫자인 문자열에서 -> {3,4} 3자리 또는 4자리 0 -> 6250
-> 하나의 문자가 -> [0-9]즉 숫자인 문자열에서 -> {4} 4자리 0 -> 9911
<각정의>
, 을
""문자열에 -> $1 첫번째 문자 - $2 두번째 문자 - $3 세번째 문자 ->로 바꾸기
따라서 다음과같은 결과값을 얻을 수 있었던 것 같습니다.
"010-6250-9911"
<replaceAll>
https://mine-it-record.tistory.com/127
<정규표현식 문법>
https://coding-factory.tistory.com/529
<자주 사용하는 정규표현식 - 휴대전화번호>
https://coding-factory.tistory.com/819
<휴대전화 정규식>
https://dahye-jeong.gitbook.io/java/java/undefined/regexp
< 느낀점 >
2주 동안 열심히라고 하기엔 부끄럽지만, 조원분들에게 뒤쳐지지 않기 위해 노력한 한 주였습니다.
처음으로 사용해보는 자바언어다보니, 모든 것이 생소해서 "오류와 우당탕!" 싸우면서 많이 힘들었습니다.
그래도 28개정도 되는 [level 1 프로그래머스] 문제를 팀원들과 분담하여 풀어가면서,
가볍게 for / if else / 문자열(int, long, string, char) / replit 실행자 사용법 등을 이해할 수 있는 시간이였습니다.
3주차 부터 주특기 공부가 시작된다고 하지만, 코딩테스트를 위해서라도 유튜브의
"자바의 정석"강의를 처음부터 들으면서
자바의 기초를 다져야 겠다는 생각을 하였습니다.
일주일이라는 짧은 시간이였지만, 너무나 부족한 저를 도와주신 조원분께 감사한 한 주였던 것 같습니다.
https://youtube.com/playlist?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
'일기 > 항해99' 카테고리의 다른 글
[항해99 6기] 2주차 개발일지 회고 (객체 지향 프로그래밍과 JVM정리) (0) | 2022.03.20 |
---|---|
[항해99 6기] 3주차 주특기교육 시작 spring) (0) | 2022.03.19 |
1주차 미니 프로젝트를 하면서 느낀 점 (0) | 2022.03.13 |
1 주차 4일차 개발일지 (0) | 2022.03.11 |
스파르타 1일차 개발일지 (0) | 2022.03.08 |