문제 시작 단어와 완성단어가 주어지고 시작단어를 최소한으로 변환시켜 완성단어까지 바꾸는 문제이다.단 단어의 변환시 한 글자만 다른 단어로 변환할 수 있다.풀이먼저 단어를 변환시키는 방법으로 DFS를 사용하였다.또한 단어의 한글자만 다른 것을 검사하는 check 함수를 구현하였다. 먼저 Check함수이다. fun check(a: String, b: String): Boolean { var cnt = 0 for (i in 0 until a.length) { if (a[i] != b[i]) cnt++ } if (cnt == 1) return true else return false}두 단어를 불러와서 검사한 뒤 한글자만 다를경우 True를 반환한다. fun DFS(sta..
문제 격자에 넴모가 배치되어있고 좌표를 설정하여 레이저를 배치했을 때 몇마리의 넴모가 사라지는 지 구하는 문제이다.풀이먼저 넴모의 배치를 보면 중력을 받기 때문에 한 위치를 잡았을 때 그 위치보다 아래층에 넴모가 무조건 배치되어있다. 레이저의 영향을 받는 넴모는 본문에서는 어렵게 설명하였는데 결국 레이저의 위치를 기준으로 오른쪽과 위쪽에 넴모들이 영향을 받는다. 따라서 문제를 해결하려면 레이저의 위치를 기준으로 해당 위치 + 오른쪽 + 위쪽의 넴모의 개수를 카운트하면된다. val (N, Q) = readLine().split(" ").map { it.toInt() }val states = readLine().split(" ").map { it.toInt() }val maxNum = states.maxO..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제연결된 네트워크를 한 묶음으로 했을 때 몇개의 네트워크가 있는지 출력하는 문제이다.풀이입력은 2차원 배열로 주어지지만 한 네트워크가 다른 네트워크를 방문하면 다른네트워크가 방문한 것과 동일하게 처리하기때문에 1차원으로 생각하면 된다.즉 한번 방문한 컴퓨터는 고려하지 않아도 된다. 먼저 방문여부를 저장해줄 visited를 1차원배열로 선언한다.val visited = MutableList(n) {0}0으로 초기화했으며 0은 미방문, 1은 방문을 의미한다. 이후 BFS에서 자기자신과 연결되어있는 컴퓨터를 저장할..
문제주어진 문자열을 회전하며 괄호가 적절한지 검사하는 문제이다.풀이해당 문제는 언뜻보면 최단거리 문제같지만 DP로 해결할 수 있다.먼저 N각형을 삼각형을 분할하는 방법이다. 이 때 분할된 삼각형 사이의 거리가 최솟값이 되어야 한다.가장 쉬운 방법은 한 꼭지점을 잡아 그 지점부터 자신과 인접하지 않은 꼭짓점으로 이동하며 선을 그으면 최솟값의 거리를 가지는 삼각형들로 분할할 수 있다. 8각형의 경우 다음과 같이 분할할 수 있다.이런식으로 분할하며 경우의 수를 모두 적어보면 다음과 같은 경우들을 얻는다N3 - 04 - 15 - 26 - 27 - 38 - 39 - 410 - 411 - 412 - 413 - 514 - 5...이 때 n각형을 계속그리면서 발견한 규칙이 있었는데 3 * 2^i 의 n각형은 i-1..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제주어진 문자열을 회전하며 괄호가 적절한지 검사하는 문제이다.풀이이 문제는 총 2가지의 로직을 시행해야 한다.1. 문자열을 회전2. 회전된 문자열이 올바른 괄호조합인지 검사. 먼저 문자열은 다음과 같이 회전시켰다. for (i in s.indices) { val tmp = s.substring(i) + s.substring(0, i) count += check(tmp) }s는 받아온 문자열이다.이 때 s.indices 즉 문자열의 길이만큼 반복한다.반복시 s.substring(i) + s.sub..
문제주어진 숫자배열에 적절한 부호를 붙혀 연산하여 target숫자가 될 수 있는 경우의 수를 구하는 문제이다.풀이문제의 조건에 숫자배열의 순서를 바꾸지 말라는 조건이 있다.따라서 각 숫자를 재귀하여 탐색하는 DFS를 사용하여 문제를 해결하였다. fun DFS(idx: Int, _summ: Int, isPlus: Boolean) { var _sum = _summ if (isPlus) { _sum += numbers[idx] } else { _sum -= numbers[idx] } if (idx == length - 1) { ..