/* 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;
}
}
''' 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” 플로리드