[프로그래머스] 2021 카카오 1, 4번 - 신규 아이디 추천 , 합승 택시 요금

zero_0·2021년 9월 11일
0

알고리즘

목록 보기
2/10
post-thumbnail

카카오 2021


1번 - 신규 아이디 추천 [정규식 java 풀이]

/* 2021.08.31 풀었음   
    1번 문제 - 신규 아이디 추천
    정규식 사용 - java
*/

class Solution {
    public String solution(String id) {
        id  = id.toLowerCase(); // 대문자-> 소문자 치환
        id = id.replaceAll("[^a-z0-9_.-]+", "");
        id = id.replaceAll("\\.{2,}", ".");
        id = id.replaceAll("(^\\.)|(\\.$)", "");
        if (id.isEmpty()) id = "a";
        if (id.length() >= 16) {
            id = id.substring(0, 15);
            id = id.replaceAll("\\.$", "");
        }
        while (id.length() <= 2)
            id += id.charAt(id.length() -1);
        return id;
    }
}


프로그래머스에 보다 좋은 정규식이 있어서 가져왔다. (.점) 표시 방식이 다르다.

class Solution {
    public String solution(String new_id) {
        String answer = "";
        String temp = new_id.toLowerCase();

        temp = temp.replaceAll("[^-_.a-z0-9]","");
        System.out.println(temp);
        temp = temp.replaceAll("[.]{2,}",".");
        temp = temp.replaceAll("^[.]|[.]$","");
        System.out.println(temp.length());
        if(temp.equals(""))
            temp+="a";
        if(temp.length() >=16){
            temp = temp.substring(0,15);
            temp=temp.replaceAll("^[.]|[.]$","");
        }
        if(temp.length()<=2)
            while(temp.length()<3)
                temp+=temp.charAt(temp.length()-1);

        answer=temp;
        return answer;
    }
}

4번 - 합승 택시 요금


''' 2021.08.29 풀었음.
    2021 카카오 코테
    4번 문제 - 합승 택시 요금'''

INF = 4000000

def floyd(dist, n):
    for k in range(n): #경유지
        for i in range(n): #출발점
            for j in range(n): #도착점
                if dist[i][k] + dist[k][j] < dist [i][j]:
                    dist[i][j] = dist[i][k] + dist[k][j]

def solution(n,s,a,b,fares):
    dist = [[INF for _ in range(n)] for _ in range(n)]
    for i in range(n):
        dist[i][i] = 0

    for edge in fares: #간선 = 요금
        dist[edge[0]-1][edge[1]-1] = edge[2] 
        dist[edge[1]-1][edge[0]-1] = edge[2] #반대 방향도 요금 같음.

    floyd(dist, n) #출발점과 도착점까지의 최단비용을 가지고 완전탐색

    s -= 1
    a -= 1
    b -= 1
    answer = INF #최솟값을 찾아야 하니까 초기값은 inf
    for k in range(n): #경유지 모두 돌면서 정답찾기
        answer =min(answer, dist[s][k] + dist[k][a] + dist[k][b])

    return answer

<프로그래머스에서 확인>

  • 사용된 알고리즘 : “Floyd-Warshal” 플로리드
profile
차근차근 채워가는 it일지

0개의 댓글