morenow
morenow
morenow
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (5)
    • [MSA] Spring Cloud로 개발하는 마이.. (14)
    • Baekjoon Online Judge (40)
    • Programmers (11)
    • Spring Boot (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • HttpExchange
  • HTTP Interface
  • 백준 파이어스톰
  • copy up
  • Refresh Token Refresh
  • Open Feign
  • write skew
  • Spring Boot
  • re-distribution
  • jwt
  • B+ Tree
  • lost update
  • 백준20058C++
  • successHandler
  • dirty write
  • Id Token
  • JWT단점
  • 마법사 상어와 파이어스톰
  • B Tree
  • Feign Client

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
morenow

morenow

Programmers

[Programmers] 단어 변환 (Java)

2023. 11. 16. 15:00

https://school.programmers.co.kr/learn/courses/30/lessons/43163

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


간단한 BFS 문제이다.

알고리즘

  1. begin 문자열과 0을 같이 큐에 넣는다.
  2. 큐가 빌 때까지 아래의 실행을 한다.
    1. 큐에서 현재 문자열과 단계를 꺼낸다.
    2. 모든 진행 가능한 word 문자열에 대해 다음을 실행한다.
      1. 만약 해당 문자열에 이미 방문했다면 지나친다.
      2. 현재 문자열과 word 문자열의 다른 부분이 1개라면 방문 처리 하고 word를 단계 + 1 해서 큐에 삽입한다.
        만약 삽입할 문자열이 target과 같다면 바로 답을 저장한다.

정답 코드

import java.util.*;

class Solution {
    
    boolean[] vis = new boolean[51];
    
    public int solution(String begin, String target, String[] words) {
        int answer = 0;
        Queue<Progress> q = new LinkedList<>();
        q.offer(new Progress(begin, 0));
        while (!q.isEmpty()) {
            Progress progress = q.poll();
            for (int i = 0; i < words.length; i++) {
                if (vis[i]) continue;
                String word = words[i];
                if (countDiff(progress.cur, word) == 1) {
                    if (word.equals(target)) {
                        answer = progress.step + 1;
                        break;
                    }
                    q.offer(new Progress(word, progress.step + 1));
                    vis[i] = true;
                }
            }
            if (answer != 0) break;
        }
        return answer;
    }
    
    class Progress {
        String cur;
        int step;
        Progress (String cur, int step) {
            this.cur = cur;
            this.step = step;
        }
    }
    
    int countDiff (String cur, String word) {
        int cnt = 0;
        for (int i = 0; i < cur.length(); i++) {
            if (cur.charAt(i) != word.charAt(i)) {
                cnt++;
            }
        }
        return cnt;
    }
}

'Programmers' 카테고리의 다른 글

[Programmers] 최고의 집합 (Java)  (1) 2023.11.16
[Programmers] 야근 지수 (Java)  (1) 2023.11.16
[Programmers] 2023 KAKAO BLIND RECRUITMENT : 택배 배달과 수거하기 (Java)  (0) 2023.10.18
[Programmers] 네트워크 (C++)  (0) 2023.10.12
[Programmers] 정수 삼각형 (C++)  (0) 2023.10.12
    'Programmers' 카테고리의 다른 글
    • [Programmers] 최고의 집합 (Java)
    • [Programmers] 야근 지수 (Java)
    • [Programmers] 2023 KAKAO BLIND RECRUITMENT : 택배 배달과 수거하기 (Java)
    • [Programmers] 네트워크 (C++)
    morenow
    morenow

    티스토리툴바