99클럽 코테 스터디 7일차 TIL

2024. 11. 3. 23:09·코딩테스트/99클럽 4기

프로그래머스 - 모음 사전

단어가 만들어지는 규칙이 이해가 안됐지만 계속 보다보니 dfs 순서로 만들어지고 있다는 것을 알게 되었다.

풀이

  • 주어진 A, E, I, O, U 사용하여 dfs 순서대로 단어를 생성한다. 
  • 생성된 단어들을 dictionary라는 리스트 자료구조에 저장한다.
  • 생성된 단어의 길이가 5를 넘는다면 상단에서 Early return으로 스택 프레임에 쌓인 함수를 종료시킨다.

단어 생성 재귀 함수

import java.util.ArrayList;
import java.util.List;

public class Solution {
    private static final String[] ALPHABETS = {"A", "E", "I", "O", "U"};
    private static final List<String> DICTIONARY = new ArrayList<>();

    public int solution(String word) {
        int answer = 0;
        generateWords("");

        return answer;
    }
    
    // 단어 생성 재귀 함수
    private void generateWords(String word) {
        if (word.length() > 5) return;
        DICTIONARY.add(word);

        for (int i = 0; i < ALPHABETS.length; i++) {
            generateWords(word + ALPHABETS[i]);
        }
    }
}

재귀 함수를 통해 규칙에 맞게 모든 단어가 dictionary에 담겼다.

dictionary를 순차적으로 돌면서 주어진 word와 같은 경우, 해당 인덱스를 반환한다.

public int solution(String word) {
    int answer = 0;
    
    generateWords("");
    
    for (int i = 0; i < DICTIONARY.size(); i++) {
        if (word.equals(DICTIONARY.get(i))) {
            answer = i;
            break;
        }
    }
    return answer;
}

generateWords 함수에 빈 값을 넣었기 때문에 dictionary의 0번째는 ""로 들어가고 실제 단어는 1번부터 시작된다.

 

이대로 끝낼 수 있지만 dictionary 반복문을 줄일 수 있을 것 같다.

List의 내부 메서드인 indexOf를 사용하여 반복문 구현 필요없이 해당 문자열의 인덱스를 바로 반환하도록 했다.

public int solution(String word) {
    generateWords("");
    return DICTIONARY.indexOf(word);
}

최종 코드

import java.util.ArrayList;
import java.util.List;

public class Solution {
    private static final String[] ALPHABETS = {"A", "E", "I", "O", "U"};
    private static final List<String> DICTIONARY = new ArrayList<>();

    public int solution(String word) {
        generateWords("");
        return DICTIONARY.indexOf(word);
    }
    
    private void generateWords(String word) {
        if (word.length() > 5) return;
        DICTIONARY.add(word);

        for (int i = 0; i < ALPHABETS.length; i++) {
            generateWords(word + ALPHABETS[i]);
        }
    }
}

프로그래머스 - 모음 사전

https://school.programmers.co.kr/learn/courses/30/lessons/84512

저작자표시 (새창열림)

'코딩테스트 > 99클럽 4기' 카테고리의 다른 글

99클럽 코테 스터디 9일차 TIL  (2) 2024.11.05
99클럽 코테 스터디 8일차 TIL  (0) 2024.11.04
99클럽 코테 스터디 6일차 TIL  (0) 2024.11.02
99클럽 코테 스터디 5일차 TIL  (0) 2024.11.01
99클럽 코테 스터디 4일차 TIL  (0) 2024.10.31
'코딩테스트/99클럽 4기' 카테고리의 다른 글
  • 99클럽 코테 스터디 9일차 TIL
  • 99클럽 코테 스터디 8일차 TIL
  • 99클럽 코테 스터디 6일차 TIL
  • 99클럽 코테 스터디 5일차 TIL
tjdgus
tjdgus
  • tjdgus
    Do It...
    tjdgus
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Language
        • Java
      • CS
        • Data Structure
        • OS
        • Algorithm
        • Network
      • 오류 모음집
      • ETC
      • 함수형 프로그래밍
      • JPA
      • Toy
      • 데이터베이스
      • Spring
      • 코딩테스트
        • 99클럽 4기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    개발자취업
    TiL
    코딩테스트준비
    티스토리챌린지
    99클럽
    오블완
    항해99
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
tjdgus
99클럽 코테 스터디 7일차 TIL
상단으로

티스토리툴바