코딩테스트 기록 2일차
CodingTest
코딩테스트 기록 2일차
1. 1152: 단어의 개수
메모
단순히 split메서드를 사용하면 풀릴줄 알았던문제. 머릿속으로는 당연히 되는데 이게 왜 안되는거지 생각하면서 시간이 조금 걸렸던문제..
Available Signatures
1
2
public String[] split(String regex, int limit)
public String[] split(String regex)
위 코드와 같이 split 함수같은 경우 정규식을 매개변수로 받는다.
즉 정규식과 일치하는 항목들을 입력 받아 분할하여 계산된 문자열로 반환하는것이다.
여기서 중요한 점이 빈 공백도 정규식으로 포함이된다.. ==> “\s”
split메서드는 정규식을 매개로 받으며, 빈공백도 정규식이라서 내가 의도한 값이 안나온 것을 이해했는데,
여기서 궁금한점이 생김.. 호기심이 생겨서 매개변수 마지막칸에 임의로 공백을 넣었는데 해당부분은 포함이되지않는것이다..
아니.. 정규식 넣으면 반환한다면서요.. 근데 이건 왜 안되는거야 ㅜㅜ
구글링하다 원인을 Baeldung 에서 찾았다.
trailing empty strings will be discarded.
split 함수는 뒤에 오는 빈 문자열은 삭제되는 임의처리를 한거같다..
개발자들이 의도한 방향으로 작업할 수 있게 따로 처리해준 느낌이다
split 정리
- split은 매개변수를 정규식으로받는다
- 공백은 정규식이다.
- 뒤에오는 문자열은 자바개발자들이 처리했으니 안심하라구!
결국 문제는 2가지 방법으로 풀었다.
- StringTokenizer 사용(장점: 코드가 짧고 간단하다.시간 : 556ms)
- 핵심 문제는 공백의 처리, StringTokenizer클래스는 연속된 구분자를 하나의 구분자로 취급, 즉 정규 표현식을 사용하진 않으며 내부로직이 다른것.
- 문자열 시작이나 끝에 있는 구분자 주변에 빈토큰 생성하지않음.
- 직접 반복문을 사용하여 단어 수 계산(장점: 정규표현식이나, 외부라이브러리에 의존X,시간 : 492ms)
- 입력받은 문자열 tirm()으로 앞뒤 공백 제거 후 null 확인
- 비어있지 않다면 단어수 1로 시작 후 반복문 사용 해 공백을 만날떄마다 단어 수 +1
2. 27160: 할리갈리
풀이
- 카드 정보 입력받기
- 과일종류와 수량에 대해 HashMap 업데이트
- 과일수량 5개가 맞는지 조건검사
methods : hashmap.put, hashmap.getOrDefault, hashmap.values
3. 2908: 상수
풀이
- 숫자값 입력
- 문자열을 거꾸로 정렬해주는 함수 생성
- 정수로 변환 후 값 비교후 조건에 맞는 값 출력.
에러
- 값 입력받을 시 nextLine()을 사용했을떄 noSuchElement에러 발생.
-> nextLine() 메소드를 사용할 때 NoSuchElementException 오류가 발생하는 것은 입력 값이 시도될 때 입력 값이 없기 때문 - method생성시 static 선언 누락.
-> 메소드 생성 시 static 선언이 누락되면, 정적 컨텍스트에서는 인스턴스 클래스에 직접 접근할 수 없음.
methods: Integer.parseInt, StringBuilder().reverse().toString()
4. 1157: 단어 공부
풀이
- 입력 문자열을 대문자로 변환
- HashMap을 사용해 문자열에서 발견되는 문자 개수 찾기
- 반복문을통해 가장 많은 개수를 보유하고있는 문자 찾기
- boolean변수 선언으로 최다 개수 문자가 중복일경우 체크 후 값 문자.
methods: toLowerCase, toCharArray, HashMap<Character, Integer>, getOrDefault, put(K key, V value)
5. 1546: 평균
메모 문제가 이해가 안되서 인터넷에 떠도는 코드 뜯어보면서 계산식을 확인해봤다..
실수는 모든점수라는 단어를 점수들을 계산한 합으로 잘못 인식해버린것이었다..
문제를 풀기위해 필요한 조건
- Sum // 모든 점수의 합
- cmp // 최대점수
- N // 점수개수
를 구해 조건식(모든 점수를 M으로 나누고 100을 곱한 뒤 평균)에 맞게 작성하면된다.
6. 7785: 회사에 있는 사람
회고
간만에 잡으니 실버 3문제를 어떻게풀어야할지 감이 안잡힌다.. 다시 공부해야될거같다.
TIL적는시간이 가끔식은 코테푸는 시간보다 길어 효율성이 떨어진다.
이에 대한 해결방안을 찾아봐야할거같다.ㅠㅅㅠ
근데 백준허브 왜 갑자기 안되냐 ㅡㅡ