250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 에라토스테네스의채
- 23288
- 파티션 크기 조정
- 자바 코테
- 재귀함수
- 코테준비
- BFS
- 완전탐색
- 코테
- 완탐
- 정올 1620
- 볼륨 만들기
- 중복순열
- 정보처리기사
- 백준2251
- Bfs와DFS
- 백준15652
- java
- N과M
- 전화번호속의암호
- 백준
- 순열
- D드라이브생성
- 자바
- 삼성역테
- 백준13458
- 주사위굴리기2
- 알고리즘
- 알고리즘개념
- 중복조합
Archives
- Today
- Total
뚱땅뚱땅
[문제] 프로그래머스 레벨 3: 단어 변환 본문
728x90
programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
내 풀이
1. BFS
import java.util.LinkedList;
import java.util.Queue;
public class PG_43163 {
public static int solution(String begin, String target, String[] words) {
// 1. target이 words 배열안에 있는지 검사 후 없으면 0 반환
boolean flag = false;
int idx = -1; // words 배열에서 target의 위치
for (int i = 0; i < words.length; i++) {
String s = words[i];
if (s.equals(target)) {
flag = true;
idx = i;
break;
}
}
if (!flag)
return 0;
int len = words.length;
boolean[] visited = new boolean[len];
// BFS
Queue<int[]> q = new LinkedList<>();
q.add(new int[] { -1, 0 }); // -1 : start, 0: cnt (바꾸는 만큼 카운트)
while (!q.isEmpty()) {
int[] curr = q.poll();
int cnt = curr[1];
String s = null;
if (curr[0] == -1) {
s = begin;
} else {
s = words[curr[0]];
}
for (int i = 0; i < len; i++) {
// 아직 방문하지 않은 단어와 현재 단어와 알파벳 차이가 1이라면,
if (!visited[i] && different(s, words[i]) == 1) {
visited[i] = true;
q.add(new int[] { i, cnt + 1 });
}
}
if (visited[idx]) { // 타겟에 방문하는 순간 종료
return cnt + 1;
}
}
return 0;
}
// 현재 문자열이랑 바꿀 문자열이랑 차이가 얼마나 나는지 확인하는 함수
static int different(String str, String change) {
int ans = 0;
for (int i = 0; i < str.length(); i++) {
char cB = str.charAt(i);
char cT = change.charAt(i);
if (cB != cT)
ans++;
}
return ans;
}
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[문제] 프로그래머스 레벨1: 모의고사 (0) | 2021.02.15 |
---|---|
[문제] 프로그래머스 레벨 1: 가운데 글자 가져오기 (0) | 2021.02.15 |
[문제] 프로그래머스 레벨 1: 두 개 뽑아서 더하기 (0) | 2021.02.15 |
Comments