[프로그래머스][Level2][Java] 전화번호 목록

2022. 6. 11. 14:21·프로그래머스/Level 2

문제

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

 

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

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

programmers.co.kr

 

풀이코드

public boolean solution(String[] phone_book) {              //전화번호 목록 문제
    String clone;
    Map<String, Integer> phones = new HashMap<>();
    for (int i = 0; i < phone_book.length; i++) {           //전화번호들을 HashMap형태로 대입
        phones.put(phone_book[i], i);
    }
    for (int i = 0; i < phone_book.length; i++) {           
        clone = phone_book[i];                              //전화번호 1개를 clone에 넣음
        for (int j = 1; j < clone.length(); j++) {          //그 전화번호의 처음부터 끝까지 잘랐을때
            if(phones.containsKey(clone.substring(0,j))){   //그 전화번호의 접두에 다른 전화번호가 있을 경우
                return false;                               //false반환
            }
        }
    }
    return true;                                            //걸리는 것이 없으면 true반환
}

이 문제는 생각보다 간단한데 우선 전화번호들을 HashMap형태로 저장을 하는데 Key값이 중요하고 value값은 딱히 상관이 없어서 마음대로 저장을 하면 된다.

그리고 굳이 HashMap형태로 저장을 안하고 ArrayList의 형태로 저장을 해도 상관이 없지만 문제가 Hash문제라서 HashMap을 사용해서 풀어보았다.

 

HashMap형태로 저장을 했으면 phone_book에 있는 전화번호 중에 1개를 뽑아서 clone에 넣는다.

Ex) clone = "1234"

그리고 그 clone을 substring을 이용해서 처음부터 조금씩 자르는데 그 자른 값이 다른 phone_book에 있으면 false를 반환한다.

예를 들어, 다른 phone_book에 "12"라는 값이 있으면 clone을 처음부터 조금씩 자를때 "12"라는 값이 나오므로 false가 반환이 되는데, 만약 phone_book에 "23"이라는 값만 있다고 치면 clone을 처음부터 자를때 절대 나올 수 없는 값이므로 true가 반환된다. 그래서 이런식으로 하나하나 다 검사를 하면 답이 나온다.

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

'프로그래머스 > Level 2' 카테고리의 다른 글

[프로그래머스][Level2][Java] 구명보트  (0) 2022.06.11
[프로그래머스][Level2][Java] 예상대진표  (0) 2022.06.11
[프로그래머스][Level2][Java] 2xn 타일링  (0) 2022.06.04
[프로그래머스][Level2][Java] 모음사전  (0) 2022.05.22
[프로그래머스][Level2][Java] 괄호 변환  (0) 2022.05.17
'프로그래머스/Level 2' 카테고리의 다른 글
  • [프로그래머스][Level2][Java] 구명보트
  • [프로그래머스][Level2][Java] 예상대진표
  • [프로그래머스][Level2][Java] 2xn 타일링
  • [프로그래머스][Level2][Java] 모음사전
BvrPark
BvrPark
코드 퍼즐과 개발 일상
  • BvrPark
    비버의 개발 일지
    BvrPark
  • 전체
    오늘
    어제
    • 분류 전체보기 (121)
      • JAVA (7)
        • 메서드 외울 것 (2)
      • 프로그래머스 (56)
        • 총 풀이 코드(깃허브) (1)
        • Level 1 (22)
        • Level 2 (33)
      • 백준 알고리즘(단계 별) (16)
        • 총 풀이 코드(깃허브) (1)
        • 1. 입출력과 사칙연산 (2)
        • 2. if 문 (2)
        • 3. for문 (1)
        • 4. while문 (2)
        • 5. 1차원 배열 (3)
        • 6. 함수 (1)
        • 7. 문자열 (1)
        • 8. 기본수학 1 (3)
      • 백준 알고리즘(solved.ac) (9)
        • 총 풀이 코드(깃허브) (1)
        • class2 (8)
      • LeetCode 문제 풀이 (4)
        • 총 풀이 코드(깃허브) (1)
        • Easy (3)
      • 코드업 알고리즘 (7)
      • git과 github사용법 (4)
      • html, css, javaScript (2)
      • 프로젝트 (11)
        • 순수 Java 프로젝트 (2)
        • 쇼핑몰 프로젝트 (2)
        • 게시판 프로젝트 (5)
        • 근태관리 프로젝트 (2)
      • 커피타임 (2)
        • 2023년 (2)
        • 2024년 (0)
  • 블로그 메뉴

    • 링크

      • 포트폴리오
      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • Designed By정상우
    BvrPark
    [프로그래머스][Level2][Java] 전화번호 목록
    상단으로

    티스토리툴바