250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • BFS
  • 선형대수
  • 개발자
  • 머신러닝
  • 파이썬
  • DP
  • 개발
  • Python
  • Front-end
  • 알고리즘
  • JAVA8
  • JPA
  • BOJ
  • 백준
  • data
  • 문제풀이
  • uArm
  • java
  • 자바
  • swift
  • SpringMVC
  • 구현
  • ios
  • ADsP
  • 브루트포스
  • 카카오
  • 프로그래머스
  • AI
  • certificate
  • 코딩테스트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim
CodingTest/Programmers

[PGM_42577] 전화번호 목록 (java)

[PGM_42577] 전화번호 목록 (java)
CodingTest/Programmers

[PGM_42577] 전화번호 목록 (java)

2022. 2. 27. 12:06
728x90
728x90

문제링크

https://programmers.co.kr/learn/courses/30/lessons/42577

 

코딩테스트 연습 - 전화번호 목록

전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
 정렬

1. 문제 이해

서로 다른 전화번호에 대한 배열이 주어진다. 전화번호의 접두어에 대한 개념을 이해하기 위해 예를 들어보겠다. 111, 1113, 1424 와 같이 번호가 주어졌다고 하자. 이 때 2번째 전화번호인 1113이 111을 앞에서 포함하고 있다. 그렇다면 111은 1113에 접두어라고 할 수 있다. 이렇게 접두어가 존재하면 false 존재하지 않으면 true을 반환하는 문제이다.

 

2. 접근방법

전화번호부 배열은 String이므로 Arrays.sort 정렬을 하게되면 사전식으로 정렬이 이루어진다. 즉 123, 12, 1, 432, 1234를 정렬하게 되면 1 12 123 1234 432로 정렬이 이루어진다. 따라서 n번 순회하며 앞과 뒤만 비교해주면 문제를 해결할 수 있다. 같은 접두어는 문자가 더 많은 쪽이 뒤로가게 되어있으니,  String.substring을 활용해 잘라서 비교해주면 쉽게 해결이 가능하다.

 

주의할 점은 1234와 432처럼 앞부분이 바뀌는 부분에서는 size의 차이가 발생하기 때문에, 이 부분에 대해서만 따로 처리를 해주면 런타임 에러도 방지할 수 있다.

 

3. 세부 해결방안

Arrays.sort(phone_book);

위와 같이 Arrays.sort()를 사용해주면 된다.

if(prefix.length() > phone_book[i+1].length())
    continue;

반복문을 순회할 때 size가 달라지는 부분은 따로 고려해줄 필요가 없으므로(앞부분이 다르기 때문) 위와같이 처리해주면된다.

구현코드

package pgm_42577;

import java.util.Arrays;

public class Solution {
    public boolean solution(String[] phone_book) {
        boolean answer = true;

        Arrays.sort(phone_book);

        for(int i = 0; i < phone_book.length-1; i++){
            String prefix = phone_book[i];
            if(prefix.length() > phone_book[i+1].length())
                continue;
            String val = phone_book[i+1].substring(0, prefix.length());
            if(prefix.equals(val)){
                answer = false;
                break;
            }
            System.out.println("phone_book[i] = " + phone_book[i]);
        }
        return answer;
    }
}
잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)

 

728x90
728x90
저작자표시 비영리 (새창열림)

'CodingTest > Programmers' 카테고리의 다른 글

[PGM_72412] 순위 검색 (java)  (0) 2022.03.02
[PGM_12985] 예상 대진표 (java)  (0) 2022.02.28
[PGM_87946] 피로도 (java)  (0) 2022.02.26
[PGM_1844] 게임 맵 최단거리 (java)  (0) 2022.02.23
[PGM_42860] 조이스틱 (java)  (0) 2022.02.22
  • 문제링크
  • 문제풀이
  • 구현코드
'CodingTest/Programmers' 카테고리의 다른 글
  • [PGM_72412] 순위 검색 (java)
  • [PGM_12985] 예상 대진표 (java)
  • [PGM_87946] 피로도 (java)
  • [PGM_1844] 게임 맵 최단거리 (java)
JinSeopKim
JinSeopKim
기록📚

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.