[면접/코딩테스트] 1-1
어제 코딩테스트를 봤습니다. 한 문제 먼저 회사에서 풀고 집에서 나머지 풀도록 했고, 검색을 이용해서 풀어도 된다고 하셨습니다. 언제까지 제출 가능하냐고 해서 '검색이 가능하다면 쉽겠지..' 라고 생각하며 허세 가득 당일까지 풀어보겠다고 하고 나왔고, 회사 앞 카페에서 푸는 와중에 ‘쉽지 않겠는데…’라는 생각과 함께 후회가 몰려왔네요. 흐윽.. 신중하게 풀고 오늘까지 제출할 걸!
최선을 다 해서 풀긴 했으나 BufferedReader, HashMap 모두 생소한 문법이라서 오늘 공부해 보려고 합니다. 회사에서 이번주 내내 면접이 있다고 하니 직접적으로 답변을 남기면 안 될 것 같아서 제가 문제 풀면서 새로 알게 된 개념들을 적어 보려고 해요.
코딩테스트를 하면서 알게 된 것은 BufferedReader를 많이 활용한 다는 점이었습니다. 교육원에서는 Scanner만 배우고 이것만 사용해서 당황하긴 했지만, 검색을 통해서 새로운 사실을 알게 돼서 신기했습니다. 현업에서는 뭘 더 많이 사용하는지 몰라서 둘 다 알고 있으면 좋을 것 같아 기록해 두려고 합니다.
BufferReader / Scanner 차이점
1. BufferReader VS Scanner 차이점
BufferReader : from JDK 1.1 Scanneer : from JDK 1.5 1. Scanner 은 버퍼리더 보다 훨씬 활용적이다. 스캐너는 정수 값으로 int, short, long, 소수값으로 float,double를 구분지어 읽어들일 수 있고 String 값..
friends-aihaja.tistory.com
우선은 Scanner의 경우 입력한 값의 형식을 그대로 받아들인다는 점이고, BufferReader의 경우는 모든 걸 문자로 받아들인다는 점이 다릅니다. Scanner(1KB) / BufferReader(8KB) 버퍼리더의 경우 큰 버퍼를 차지하고 있기 때문에 더 많은 양의 문자열을 받아 들일 때 이외에는 Scanner를 사용하는 것이 좋다고 합니다. 더 먼저 등장한 것은 버퍼리더(JDK 1.1)이고, 스캐너(JDK 1.5 realse)는 그 다음!
뭐니뭐니해도 가장 큰 차이 점은 속도!!
자동으로 형식을 구분하는 Scanner는 편리함이 장점이지만, 속도가 느리다는 치명적인 단점이 있습니다. BufferReader의 경우 버퍼를 사용하기 때문에 입력 속도를 확연하게 줄일 수 있다고 합니다. 때문에 많은 알고리즘 사이트에서 버퍼 리더를 많이 쓴다고 해요~
** 사용방법 **
[JAVA] Scanner 대신 Buffer를 사용해보자!
BOJ에서 신나게 문제를 풀고 있던 나... 빠른 A+B라는 제목부터 의문을 가지게 되는 문제를 보게 된다. 빠른 A+B??? A+B면 A+B지, 빠른 A+B는 뭔데??? 🧐 왠지 모르게 앞으로 자주 볼 아이같으니 왜 저걸
ltw2.tistory.com
모든 걸 String으로 받아들이기 때문에 형변환을 알아 두는 게 좋은데요.
String을 int로 형변환 하는 방법을 알아 두는 것도 좋습니다!
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
프로젝트 때 많이 사용했던 Integer.parseInt();
br.readLine()는 받아들인 문자열 값을 변환한다는 뜻입니다.
[JAVA] Integer.parseInt()
parse의 종류 int 뿐만 아니라 byte, short, long, float, double 등 숫자와 관련된 타입은 전부 가능함 parseByte() / parseShort() / parseInt() / parseLong() / parseFloat() / parseDouble() () 안에는 문자..
ninearies.tistory.com
parse의 종류가 Int 뿐만 아니라 byte, short, float, double 등 숫자 타입은 전부 변환이 가능합니다.
parseInt 뒤에 (,)로 구분을 두고 뒤에 숫자를 입력하면 기본형은 10진수이고, 해당 진수로도 변환이 가능합니다.
scanner의 경우 띄어쓰기 기준으로 파싱을 하고싶을 땐 토크나이져를 사용합니다.
코딩테스트를 할 때 띄어쓰기 기준으로 세가지 숫자형을 변수에 담아야 하는 상황이 있었는데 StringTokenizer를 이용해 파싱을 해서 각각 담아줬습니다. 사실 코딩테스트에 익숙하지 않아서 잘 풀었는지 모르겠지만... 그냥 제가 알고 있는 선에서 최선을 다 해 풀었답니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
//토크나이저로 문자열을 받는다.
int ko = Integer.parseInt(st.nextToken());
//띄어쓰기 기준으로 변수에 담아준다.
int en = Integer.parseInt(st.nextToken());
int math = Integer.parseInt(st.nextToken());
StringTokenizer 참고하면 좋을 게시물 :
[Java]Java 개발시 효율적인 입출력 팁
Java I/O 사용시 좋은 성능을 내는 팁들이다.
ryulth.com
출력할 때는 소수점 둘째자리까지 출력을 해야했기 때문에 String.format도 이용해줬습니다.
System.out.println(String.format("%.2f", avg) + " " + grade);
제출하고 깨달은 거지만 '그냥 처음부터 printf를 이용할 걸!'하는 생각도 했네요. 아 아쉬워라~~
format을 이용할 때 참고하면 좋을 게시물 :
[Java] String.format() | 문자열 형식 지정하기 | %%%ds가 뭘까? | %%
String은 String의 static method인 format()을 통하여 형식을 지정할 수 있다. format 메서드: format 메서드의 인자로 "String format"과 "Object... args"가 보인다. 이에 대한 설명을 읽어보자: 첫 번째 인..
splendidlolli.tistory.com
3) 특정 문자열과 특정 문자열 사이의 문자열을 출력하는 문제
사실 문자열 추출 방법은 다양하게 존재 합니다.
쉽게 이용하기 위해서는 라이브러리를 참고하는 방법이 있지만,
코딩테스트의 경우 그게 가능하지 않기 때문에 정규식을 이용해줬습니다.
3번 문제는 처음 보는 정규식을 사용해서 애먹었습니다.
사실 BufferReader를 처음 사용하다보니 SQL문제 빼고는 모든 게 다 힘들었네요 히잉~
저는 Pattern, Matcher를 이용을 해서 풀어줬습니다.
여기서 문제는 앞뒤의 특정 문자열이 함께 따라왔다는 점입니다 ...
matcher.group(2).trim() //2를 넣어 줌
그럴 때 사용하는 것이 group(2)인데 (\\b문자열1\\b)(.*?)(\\b문자열2\\b) 괄호()를 기준으로 두번째 그룹을 추출하기 위해서 사용해줬습니다.
참고하면 좋을 게시물 :
[java] 특정 문자열 사이의 문자열 추출하기, 정규식
특정 문자열 사이의 문자열 추출하기 다음과 같은 문자열이 있을때 파이프(|) 사이의 문자열인 "may&q...
blog.naver.com
문자열 사이의 특정 단어 추출하기
개발하다보면 정규표현식을 사용하게 되는데, 문자열 콘텐츠 중 특정 단어를 추출해야할 일이 생기곤 한다. 이럴 때 정규표현식이 기가막히게 사용된다. 알아두면 유용하게 쓸 수 있다 final Strin
codify.tistory.com
다음에서 계속 . . . ~~~