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
- 백준 #백준2217 #백준로프 #python
- 카카오 코테
- 프로그래머스 #NULL 처리하기
- 카카오 #프로그래머스 #python #코딩테스트 #오픈채팅방
- 동
- 프로그래머스 #네트워크 #c++ #코딩테스트 #코테 #코테준비 #dfs
- 그리디알고리즘 #그리디 #백준 #우선순위큐 #최소힙 #최대힙 #알고리즘 #코딩테스트 #python
- 프로그래머스 #python #코딩테스트 #코테공부 #알고리즘 #dict
- 백준 #백준알고리즘 #알고리즘 #코딩테스트 #코딩테스트준비 #코테준비 #백준2110 #python #문제풀이
- 프로그래머스 #c++ #코딩테스트
- 백준 #이거다시풀기
- 프로그래머스 #python #2021카카오 #카카오코테 #카카오인턴쉽
- 프로그래머스 #sql #mysql #코딩테스트
Archives
- Today
- Total
say repository
[프로그래머스] 단어 변환 c++ (*) 본문
728x90
https://programmers.co.kr/learn/courses/30/lessons/43163
출처: 프로그래머스
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int answer = 50;
bool visited[50]; //방문words
//begin과 한 글자만 다른 words 찾는 함수
bool oneDiff(string a, string b){
int cnt_diff = 0;
for(int i=0; i<b.size(); i++){
if(a[i]!=b[i]){
cnt_diff ++;
}
}
if(cnt_diff == 1) //하나만 다르면
return true;
else
return false;
}
void dfs(string begin, string target, vector<string> words, int idx){
if(begin == target){ //종료조건
answer = min(idx, answer);
return; //종료
}
for(int i=0; i<words.size(); i++){
//한글자만 다르고 아직 방문하지 않았으면
if(oneDiff(begin, words[i]) && !visited[i]){
visited[i] = true;
dfs(words[i], target, words, idx+1);
visited[i] = false; //dfs종료 후 돌아오면, 백트래킹
}
}
return;
}
int solution(string begin, string target, vector<string> words) {
dfs(begin, target, words,0);
if(answer == 50){ //변환할 수 없으면 0
answer = 0;
}
return answer;
}
최대 words의 길이가 50이니까 answer도 50, visited크기도 50으로 맞춘다.
이 말은 최대로 50번 변환할 수 있다는 것이다.
우리는 최단 횟수를 구해야 하기에 횟수 0부터 시작해서 50이랑 비교해서 최솟값을 구해낸다.
dfs로 풀이했다.
begin과 words에 있는 단어를 비교했을 때, 한 글자만 다른 단어만 방문 가능하다.
한 글자만 다른 것을 판별하는 함수를 따로 oneDiff()로 만들었다.
아직 방문하지 않았고 한 글자만 다른 단어만 방문 표시하고 다음 단계인 dfs 진행한다.
dfs가 종료되었을 때, 다시 백트래킹으로 visited [i]= true 했던 것을 visited[i] = false 처리해준다.
백트래킹...............
연습하자
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 python (0) | 2022.03.21 |
---|---|
[프로그래머스] 더 맵게 c++ (0) | 2022.03.19 |
[프로그래머스] 네트워크 c++ (0) | 2022.03.18 |
[프로그래머스] 타겟 넘버 c++ (0) | 2022.03.18 |
[프로그래머스] 카펫 c++ (0) | 2022.03.17 |