반응형
반응형
문제 주어진 문자열이 유효한 IPv4 형식인지 유효한 IPv6 형식인지 확인하는 문제이다. 풀이 주어진 문자열이 특정한 구분자로 나눠지는 확인하고 dot(.) 3개로 구분되어 있으면 IPv4로 간주하고 유효한 지 확인한다. colon(:) 7개로 구분되어 있으면 IPv6로 간주하고 유효한 지 확인한다. 그 외의 경우는 “Neither” 를 반환한다. 유효한 IPv4 확인하는 방법은 dot(.)으로 나눈 substring 마다 아래의 경우를 확인한다. 0-255 사이에 위치한 숫자여야 함 0이 아닌 경우를 제외하면 0으로 시작하는 경우가 없어야 함 유효한 IPv6 확인하는 방법은 colon(:)으로 나눈 substring 마다 아래의 경우를 확인한다. 길이가 1 이상 4 이하여야함 hexadecimal에 ..
문제 풀이 첫 번째 예제(nums = [1,2,3,4,5,6,7], k = 3)를 그리면 아래와 같다. 초록색 네모 그룹을 1번 그룹이라고 하고 파란색 동그라미 그룹을 2번 그룹이라고 할 때 결과는 2번 그룹과 1번 그룹의 순서를 서로 바꿔주면 된다. 1번 그룹 : 0 ~ k-1 2번 그룹 : k ~ input.length-1 다시 그림으로 간략하게 표현하면 다음과 같다. 화살표는 숫자의 오름차순 정렬을 표현했다. 결과가 나오려면 3번의 reverse를 수행해야 한다. 2번 그룹 reverse 1번 그룹 reverse 전체 그룹 reverse reverse 과정을 그림으로 표현하면 아래와 같다. 코드 class Solution { public void rotate(int[] nums, int k) { i..
문제 풀이 기본적으로 탐색하는 character가 문자면 소문자, 대문자로 변환하고 숫자면 다음 character로 넘어갔다. 마지막까지 완료하면 새로운 문자열을 반환하였다. 개념을 그림으로 표현해봤다. 주어진 문자열이 "a1b2" 이면 결과로 ["a1b2", "a1B2", "A1b2", "A1B2"] 가 반환된다. dfs 함수를 만들고 character가 문자면 두 갈래(소문자, 대문자)로 나눠서 계속 함수를 호출해 풀었다. 코드 class Solution { fun letterCasePermutation(s: String): List { val result = arrayListOf() dfs(s.toCharArray(), 0, result) return result } fun dfs(target: C..
문제 풀이 주어진 2차원 배열에서 상하좌우 4방향으로 시작위치의 색과 같은 색이면 새로운 색으로 칠하면 되는 문제이다. dfs, bfs 풀이로 풀면 된다. 처음에 아래와 같이 작성했다가 Time Limit Exceeded 나왔다. class Solution { fun floodFill(image: Array, sr: Int, sc: Int, newColor: Int): Array { val baseColor = image[sr][sc] fun fill(row: Int, col: Int) { if (row !in image.indices || col !in image[0].indices || image[row][col] != baseColor) { return } image[row][col] = newCo..