포스트

코딩테스트 기록 2일차

CodingTest

코딩테스트 기록 2일차

1. 1152: 단어의 개수

Problem Link
Solved Link

메모

단순히 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 정리

  1. split은 매개변수를 정규식으로받는다
  2. 공백은 정규식이다.
  3. 뒤에오는 문자열은 자바개발자들이 처리했으니 안심하라구!

결국 문제는 2가지 방법으로 풀었다.

  1. StringTokenizer 사용(장점: 코드가 짧고 간단하다.시간 : 556ms)
    • 핵심 문제는 공백의 처리, StringTokenizer클래스는 연속된 구분자를 하나의 구분자로 취급, 즉 정규 표현식을 사용하진 않으며 내부로직이 다른것.
    • 문자열 시작이나 끝에 있는 구분자 주변에 빈토큰 생성하지않음.
  2. 직접 반복문을 사용하여 단어 수 계산(장점: 정규표현식이나, 외부라이브러리에 의존X,시간 : 492ms)
    • 입력받은 문자열 tirm()으로 앞뒤 공백 제거 후 null 확인
    • 비어있지 않다면 단어수 1로 시작 후 반복문 사용 해 공백을 만날떄마다 단어 수 +1

Desktop View

[참조자료] Baeldung, blog

2. 27160: 할리갈리

Problem Link
Solved Link

풀이

  1. 카드 정보 입력받기
  2. 과일종류와 수량에 대해 HashMap 업데이트
  3. 과일수량 5개가 맞는지 조건검사

methods : hashmap.put, hashmap.getOrDefault, hashmap.values


3. 2908: 상수

Problem Link
Solved Link

풀이

  1. 숫자값 입력
  2. 문자열을 거꾸로 정렬해주는 함수 생성
  3. 정수로 변환 후 값 비교후 조건에 맞는 값 출력.

에러

  1. 값 입력받을 시 nextLine()을 사용했을떄 noSuchElement에러 발생.
    -> nextLine() 메소드를 사용할 때 NoSuchElementException 오류가 발생하는 것은 입력 값이 시도될 때 입력 값이 없기 때문
  2. method생성시 static 선언 누락.
    -> 메소드 생성 시 static 선언이 누락되면, 정적 컨텍스트에서는 인스턴스 클래스에 직접 접근할 수 없음.


methods: Integer.parseInt, StringBuilder().reverse().toString()

4. 1157: 단어 공부

Problem Link
Solved Link

풀이

  1. 입력 문자열을 대문자로 변환
  2. HashMap을 사용해 문자열에서 발견되는 문자 개수 찾기
  3. 반복문을통해 가장 많은 개수를 보유하고있는 문자 찾기
  4. boolean변수 선언으로 최다 개수 문자가 중복일경우 체크 후 값 문자.

methods: toLowerCase, toCharArray, HashMap<Character, Integer>, getOrDefault, put(K key, V value)

5. 1546: 평균

Problem Link
Solved Link

메모 문제가 이해가 안되서 인터넷에 떠도는 코드 뜯어보면서 계산식을 확인해봤다..
실수는 모든점수라는 단어를 점수들을 계산한 합으로 잘못 인식해버린것이었다..

문제를 풀기위해 필요한 조건

  1. Sum // 모든 점수의 합
  2. cmp // 최대점수
  3. N // 점수개수

를 구해 조건식(모든 점수를 M으로 나누고 100을 곱한 뒤 평균)에 맞게 작성하면된다.

6. 7785: 회사에 있는 사람

Problem Link
Solved Link

회고

간만에 잡으니 실버 3문제를 어떻게풀어야할지 감이 안잡힌다.. 다시 공부해야될거같다.
TIL적는시간이 가끔식은 코테푸는 시간보다 길어 효율성이 떨어진다.
이에 대한 해결방안을 찾아봐야할거같다.ㅠㅅㅠ
근데 백준허브 왜 갑자기 안되냐 ㅡㅡ

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.