본문 바로가기

Easy11

[leetcode] 205. Isomorphic Strings [leetcode] 205. Isomorphic Strings 문제 풀이 주어진 두 문자열이 Isomorphic 이면 true를 반환, 아니면 false를 반환하면 되는 문제 map를 하나 생성해서 두 문자열을 매핑하고 비교하면 된다. 하지만 한 가지 주의해야 할 점은 두 문자가 같은 문자에 맵핑될 수 없다는 점이다. 즉 아래와 같은 경우는 o가 a와 r에 매핑되므로 false가 반환되어야 한다. f -> b o -> a o -> r 아래와 같은 경우 역시 b와 d가 b에 매핑되고 a와 c가 a에 매핑되므로 false가 반환되어야 한다. b -> b a -> a d -> b c -> a s -> t 로 매핑되는 맵과 t -> s 로 매핑되는 맵 2가지를 만들어서 계산하면 위 같은 케이스를 구분할 수 있다.. 2023. 1. 10.
[leetcode] 724. Find Pivot Index [leetcode] 724. Find Pivot Index 풀이 왼쪽 값들의 합과 오른쪽 값들의 합이 일치하는 pivot 인덱스를 찾는 문제이다.찾지 못하면 -1를 반환하면 된다.전체 값의 합을 구한 다음, 해당 값을 이용해서 오른쪽 값들의 합을 구하면 된다. 오른 쪽 값들의 합 = 전체 값의 합 - pivot - 왼쪽 값들의 합 참고로 Java Stream API 를 이용해서 Array의 sum 값을 구할 수 있다. Arrays.stream(array).sum(); 코드 class Solution { public int pivotIndex(int[] nums) { var total = Arrays.stream(nums).sum(); var leftSum = 0; for(int i=0; i 2023. 1. 9.
[leetcode] 733. Flood Fill [leetcode] 733. Flood Fill 문제 풀이 주어진 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) { retur.. 2021. 10. 3.
[leetcode] 278. First Bad Version [leetcode] 278. First Bad Version 문제 풀이 bool isBadVersion(version) 함수가 주어지고 Bad가 처음 발생한 버전을 찾는 문제이다. 이진 탐색을 이용해서 풀면 되는 문제다. Kotlin으로 풀었는데 한 가지 주의할 점은 middle를 구할 때 (high + low)/2 이용하면 Integer 범위를 초과할 수 있어 Time Limit Exceeded 이 나온다. 대신에 low + (high - low)/2 를 이용하면 해결할 수 있다. (low + high)/2 = low + (high-low)/2 코드 /* The isBadVersion API is defined in the parent class VersionControl. def isBadVersio.. 2021. 9. 26.
[leetcode] 937. Reorder Data in Log Files 문제 인풋으로 주어진 로그는 식별자와 내용으로 구성되어 있다. 로그의 타입은 숫자로만 이뤄진 숫자 로그와 알파벳으로만 이뤄진 문자 로그로 구분된다. 로그의 순서는 다음과 같아야 한다. 숫자 로그는 문자 로그의 뒤에 와야 한다. 문자 로그 간의 순서는 내용의 사전식 순서여야 한다. 문자 로그의 내용이 같다면 식별자의 사전식 순서로 정렬한다. 숫자 로그 간 순서는 유지해야 한다. 풀이 로그가 숫자 로그인지 문자 로그인지를 구분하는 함수를 만들었다. 그리고 문자 로그 리스트를 아래 조건대로 정렬한 다음 숫자 로그 리스트를 덧 붙여서 해결했다. 식별자를 제외한 로그의 알파벳 순서 비교 만약 같다면 식별자의 알파벳 순서 비교 코드 그냥 생각의 흐름대로 풀었다. 나중에 solution이랑 discuss 확인해서 더.. 2021. 6. 28.
[leetcode] 125. Valid Palindrome 문제 풀이 주어진 문자열이 팰린드롬인지 확인하는 문제이다. 팰린드롬은 뒤집어도 같은 말이 되는 단어 또는 문장을 말한다. 문제에서 팰린드롬인지 확인할 때 알파벳과 숫자만을 대상으로 하고 대소문자를 구분하지 않는다고 했다. 우선 주어진 문자열을 다 소문자로 바꾼다. 그리고 정규식으로 알파벳과 숫자가 아닌 불필요한 문자를 제거한다. 이제 for 문을 돌면서 왼쪽 인덱스의 값과 오른쪽 인덱스의 값이 같은지를 확인한다. 왼쪽은 한 칸씩 오른쪽으로, 오른쪽은 한 칸씩 왼쪽으로 이동하면서 비교한다. 만약 비교한 값이 다르면 팰린드롬이 아니고 모두 같으면 팰린드롬이다. 코드 class Solution { public boolean isPalindrome(String s) { s = s.toLowerCase(); St.. 2021. 6. 22.