99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어

2024. 7. 24. 13:43·Algorithm/99클럽 코테 스터디
728x90
반응형

💡문제

[level 1] 숫자 문자열과 영단어 - 81301

문제 링크

성능 요약

메모리: 71.7 MB, 시간: 24.66 ms

 

 

 

 

 


🤔접근법

문제 요약

  • 숫자와 영어로 된 숫자가 띄어쓰기 되지 않은 상태로 문자열로 주어진다.
  • 부분부분 영어로 되어 있는 숫자로 바꿔서 정수형으로 출력하라.

범위 체크 및 시간복잡도 예상

  • 1 ≤ 주어지는 문자열의 길이 ≤ 50
  • 모든 문자열이 숫자라고 하더라도 50이므로 시간복잡도가 null~null~한 아주 착한 문제

풀이법

⭕ 접근 방법. 완탐

  1. 주어진 문자열에서 1 ~ 9 까지 검색 , zero ~ nine 까지 검색
  2. 만약 존재한다면 존재하는 문자열의 첫번째 인덱스을 반환받아 result 배열에 영문숫자와 치환되는 숫자를 기입
  3. 중복되는 숫자가 존재할 수 있으므로 이미 검색된 문자열을 @로 치환
  4. 더이상 검색되는 영문숫자와 숫자가 없다면 result 배열을 처음부터 순회하면서 숫자 합치기

substring 시간복잡도 → $O(N)$

indexOf 시간복잡도 → $O(NM)$ (m은 찾고자하는 문자열의 길이인데 영문숫자 최대 길이는 5이다)

➡️ 해당 풀이법의 시간 복잡도 : $O(N^2M)$

 

 


😎SUCCESS

단박에 성공하지 못한 이유는 ?

  • String 관련 메소드를 다 까먹어서 검색했다.
  • 시간복잡도도 기억안남
  • repeat 이라는 좋은 메소드를 알아냈다 ㅎ

👩‍💻 코드

import java.io.*;
import java.util.*;

class Solution {
    // 숫자에 해당하는 영어 단어 배열
    static String[] engNum = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    // 결과를 저장할 배열
    static int[] result = new int[51];
    // 더 이상 숫자를 찾지 못했는지 여부를 나타내는 플래그
    static boolean flag = true;
    
    public static int solution(String s) {
        int answer = 0;
        // result 배열을 -1로 초기화하여 초기값을 설정
        Arrays.fill(result, -1);
        
        while (true) {
            flag = true;
            // 0부터 9까지의 숫자와 해당하는 영어 단어를 체크
            for (int i = 0; i < 10; i++) {
                s = checkNumber(s, i);
                s = checkEngNumber(s, i);
            }
            // 더 이상 숫자를 찾지 못하면 루프 종료
            if (flag) {
                break;
            }
        }

        // result 배열을 이용해 최종 숫자를 만듦
        answer = Integer.parseInt(makeNum());
        return answer;
    }

    private static String makeNum() {
        String answer = "";
        // result 배열에서 숫자를 하나의 문자열로 결합
        for (int i = 0; i < 51; i++) {
            if (result[i] != -1) {
                answer = answer + result[i];
            }
        }
        return answer;
    }

    private static String checkNumber(String s, int i) {
        // 숫자 문자의 첫 번째 위치를 찾음
        int idx = s.indexOf(String.valueOf(i));
        if (idx != -1) {
            flag = false;
            result[idx] = i;
            // 찾은 숫자 문자를 '@'로 대체
            s = s.substring(0, idx) + "@" + s.substring(idx + 1);
        }
        return s;
    }

    private static String checkEngNumber(String s, int i) {
        // 영어 단어의 첫 번째 위치를 찾음
        int idx = s.indexOf(engNum[i]);
        if (idx != -1) {
            flag = false;
            result[idx] = i;
            // 찾은 영어 단어를 같은 길이의 '@' 문자열로 대체
            s = s.substring(0, idx) + "@".repeat(engNum[i].length()) + s.substring(idx + engNum[i].length());
        }
        return s;
    }
}

 

반응형

'Algorithm > 99클럽 코테 스터디' 카테고리의 다른 글

99클럽 코테 스터디 6일차 TIL + Arrays.sort/[프로그래머스] 테이블 해시 함수  (0) 2024.07.27
99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범  (0) 2024.07.27
99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축  (0) 2024.07.25
99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD  (1) 2024.07.23
99클럽 코테 스터디 1일차 TIL + 배열/스택  (2) 2024.07.22
'Algorithm/99클럽 코테 스터디' 카테고리의 다른 글
  • 99클럽 코테 스터디 5일차 TIL + HashMap/[프로그래머스] 베스트앨범
  • 99클럽 코테 스터디 4일차 TIL + 문자열/[프로그래머스] 문자열 압축
  • 99클럽 코테 스터디 2일차 TIL + 유클리드호제법/GCD
  • 99클럽 코테 스터디 1일차 TIL + 배열/스택
제가안난데여♪(´ε`*)
제가안난데여♪(´ε`*)
기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 제가안난데여♪(´ε`*)
    안나의 전두엽 어딘가 🧠
    제가안난데여♪(´ε`*)
    기억의 유한함을 기록의 무한함으로 ✍️ 예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • 간단하게 한스푼🥄 (1)
      • Programming (56)
        • Spring (16)
        • Vue.js (6)
        • Deep Learning (3)
        • DataBase (5)
        • React (26)
      • DevOps (21)
        • Docker (12)
        • Linux (4)
      • Algorithm (46)
        • 알고리즘 정리 (5)
        • 자료구조 (0)
        • PS - 백준 (28)
        • 99클럽 코테 스터디 (13)
      • Project (0)
        • CampFire (0)
      • 안나의 취뽀일기 (˵ •̀ ᴗ - ˵ ) ✧ (4)
        • SSAFY_9기 (2)
        • SW 부트캠프 (2)
  • 잔디 달력

    «   2025/07   »
    일 월 화 수 목 금 토
    1 2 3 4 5
    6 7 8 9 10 11 12
    13 14 15 16 17 18 19
    20 21 22 23 24 25 26
    27 28 29 30 31
  • 인기 글

  • 태그

    개발자 취업
    알고리즘
    항해99
    도커컨테이너
    백준 구현문제
    코딩테스트 준비
    java 백준
    docker
    linux
    topology sort
    99클럽
    자바
    front-end
    백준
    도커
    백준 java
    김영한
    Vue
    Vue.js
    greedy
    리액트 상태
    til
    java
    Vue.js 입문하기
    springboot
    java stack
    자바 스택
    stack
    React
    Spring
  • 07-20 16:30
    반응형
  • hELLO· Designed By정상우.v4.10.3
제가안난데여♪(´ε`*)
99클럽 코테 스터디 3일차 TIL + [프로그래머스] 숫자 문자열과 영단어
상단으로

티스토리툴바