알고리즘/알고리즘
[Kotlin] 행렬에서 특정 원소에 0이 포함되면 해당 원소의 행과 열 모두 0으로 만들기
문제 행렬에서 특정 원소에 0이 포함되면 해당 원소의 행과 열 모두 0으로 만들기 문제 풀기 전 확인 사항 - 행렬의 최대 행과 열의 수 확인 - 원소는 모두 Int 인지 확인 문제 풀이 1. 한 번 모든 원소를 돌면서 0으로 만들어질 row index와 column index를 체크한다. 2. 체크된 index에 해당하는 row, column을 모두 0으로 만든다. class Solution { fun makeZero(matrix: Array) { if (matrix.size == 0) return val rowDoneArray = BooleanArray(matrix.size) val columnDoneArray = BooleanArray(matrix[0].size) matrix.forEachIndex..
[Kotlin] Matrix 90도 회전시키기 : Matrix Rotation
문제 NxN Matrix가 주어졌을 때 이를 90도 회전시키는 알고리즘을 작성해라. 각 픽셀은 4bytes로 이루어져 있다. 문제 풀기 전 확인 사항 - 시작점은 [0, 0]으로 둔다. -> [x, y] 위치는 [y, N-1-x]로 이동한다. 문제 풀이1 이런 문제는 먼저 쉬운 방식으로 풀어야 한다. 1. 같은 크기의 Matrix를 만들어낸다. 2. [x, y] 위치의 원소를 새로운 Matrix의 [y, N-1-x] 로 이동한다. class Solution() { fun rotate(matrix: Array): Array { val SIZE_N = matrix.size val newMatrix = Array(SIZE_N) { IntArray(SIZE_N) } matrix.forEachIndexed { r..
[Kotlin] String 압축하기 : 반복되는 문자 압축하기
문제 반복되는 문자를 합쳐서 [문자][반복된 숫자]로 표현하라. 만약 압축된 문자가 원래 문자보다 길다면 원래 문자를 반환하라 예1) aaabbccc -> a3b2c3 예2) abbc -> abbc : a1b2c1 보다 원래 문자가 더 짧으므로 문제 풀기 전 확인 사항 - String에 스페이스가 있는가? - 같은 길이면 어떻게 하는가? 문제 풀이 - string의 첫 Char로 초기화 하고 포인터를 1씩 증가시키면서 같은 Char이 나오는지 확인해야 한다. - 같은 Char이 나오면 counter을 1씩 증가시킨다. - 다른 Char이 나오면 StringBuilder에 추가한다. class Solution() { fun compress(string: String) : String { var pointe..
[Kotlin] 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인
문제 두개의 String이 있다고 했을 때, 하나의 String에 대해 문자를 하나 이하로 추가하거나 지우거나 다른 값으로 바꾸었을 때 동일한지 확인 - "abcd", "abc" 이면 문자 하나가 차이나므로 true반환 - "abcd", "acbd" 이면 문자가 2개를 바꿔야 하므로 false 반환 문제 풀기 전 확인 사항 1. 공백이 있는지 확인해야 함. 공백은 없음 2. 대소문자 구분이 있는지 확인해야 함. 대소문자 구분 있음 문제 풀이1 첫 문제풀이는 문제 풀이의 경우를 세가지로 나눈다. 1. 문자열의 길이가 같은 경우 2. 문자열의 길이가 1 차이 나는 경우 3. 문자열의 길이가 2 이상 차이 나는 경우 각 방식은 다음과 같이 구현한다. 1. 문자열의 길이가 같은 경우 - 포인터를 1씩 증가시키면..
[Kotlin] String이 Palindrome Permutation인지 확인하기
문제 String이 주어졌을 때 String이 Palindrome Permutation인지 확인하라 *Palindrome이란 문자열이 좌우 대칭인 경우를 뜻한다. 문자열이 "abcc ba" 일 경우 palindrome이다. *Permutation이란 문자열의 순서를 바꾸는 것을 뜻한다. 예를 들어 "abc"를 "cba"로 바꾸는 것을 뜻한다. *Palindrome Permutation은 문자열의 순서를 바꿨을 때 문자가 좌우 대칭(Palindrome)인지 확인하는 것이다. 예를 들어 "aabb cc"일 경우 이 문자열의 순서를 "abccba"로 바꿀 수 있으므로 Palindrome Permutation이다. 문제 풀기 전 확인 사항 1. 대소문자를 구분해야 되는지 확인 2. 띄워쓰기를 문자로 포함해야 되..