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 | 29 | 30 |
Tags
- 알고리즘
- 백준
- 재귀함수
- 자바 코테
- BFS
- 주사위굴리기2
- 중복조합
- 볼륨 만들기
- java
- 완전탐색
- 삼성역테
- 중복순열
- D드라이브생성
- 완탐
- 백준15652
- N과M
- 에라토스테네스의채
- 정올 1620
- 파티션 크기 조정
- 코테준비
- 알고리즘개념
- 백준2251
- 코테
- 23288
- 전화번호속의암호
- 정보처리기사
- Bfs와DFS
- 백준13458
- 순열
- 자바
Archives
- Today
- Total
뚱땅뚱땅
[문제] 프로그래머스 레벨 3: 단어 변환 본문
728x90
programmers.co.kr/learn/courses/30/lessons/43163
내 풀이
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