문제

https://leetcode.com/problems/spiral-matrix/description/

 

Spiral Matrix - LeetCode

Can you solve this real interview question? Spiral Matrix - Given an m x n matrix, return all elements of the matrix in spiral order.   Example 1: [https://assets.leetcode.com/uploads/2020/11/13/spiral1.jpg] Input: matrix = [[1,2,3],[4,5,6],[7,8,9]] Outpu

leetcode.com

Given an m x n matrix, return all elements of the matrix in spiral order.

=> m x n 행렬이 주어지면 행렬의 모든 원소를 나선형 순서로 반환하라.

 

 

문제 풀이

2차열 배열을 나선형 순서로 순회하는 문제이다.

1. 위쪽 가로줄

2. 오른쪽 세로줄

3. 아래쪽 가로줄

4. 왼쪽 세로줄

1~4까지 순서대로 순회하면 되는데, 단 3, 4번에서 1, 2를 방문했는지 체크해야 한다. 

예를 들어보자.
3번을 순회하는데 top이 bottom을 넘으면 이미 위쪽 가로줄을 방문한 상태이므로 아래로 내려갈 필요가 없다.

또 4번을 순회하는데 left가 right을 넘으면 이미 오른쪽 세로줄을 방문한 상태이므로 왼쪽으로 이동할 필요가 없다.

 

해당 규칙만 알고 문제를 풀면 된다.

 

 

 

코드

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    if (!matrix || matrix.length === 0) {
        return [];
    }

    const result = [];
    let top = 0;
    let right = matrix[0].length - 1;
    let bottom = matrix.length - 1;
    let left = 0;

    while (top <=bottom && left <= right) {
        // 위쪽 가로줄
        for (let i=left; i<=right; i++) {
            result.push(matrix[top][i])
        }
        top++;

        // 오른쪽 세로줄
        for (let i=top; i<=bottom; i++) {
            result.push(matrix[i][right])
        }
        right--;

        // 아래 가로줄
        if (top <= bottom) {
            for (let i=right; i>=left; i--) {
                result.push(matrix[bottom][i])
            }
            bottom--;
        }

        // 왼쪽 세로줄
        if (left <= right) {
            for (let i=bottom; i>=top; i--) {
                result.push(matrix[i][left])
            }
            left ++;
        }
    }
    return result;
};

문제

Given a string s, find the length of the longest substring without repeating characters.

문자열이 지정된 경우 반복 문자 없이 가장 긴 부분 문자열의 길이를 찾아라.

 

 

풀이법

1. 겹치치 않는 문자열을 저장한다. a2. a에서 s[i]와 겹치는 게 있는지 확인한다.

- 겹치는 게 있다면 a에서 s[i] 인덱스를 기준으로 slice 한다.

- 겹치는 게 없다면 a에 s[i]를 추가한다.

3. 가장 긴 문자열 기준이므로 문자열 길이를 저장한다.

 

 

코드

var lengthOfLongestSubstring = function (s) {
	let substr = ''; // 겹치치 않는 문자열 저장
	let count = 0;
	for (let i = 0; i < s.length; i++) {
		if (substr.includes(s[i])) {
			// 만약 substr에 포함되어 있으면
			// 포함되어 있는 s[i]의 인덱스를 찾아서 +1부터 끝까지 자른다.
			substr = substr.slice(substr.indexOf(s[i]) + 1);
		}
		substr += s[i];
		if (count < substr.length) {
			count = substr.length;
		}
	}
	return count;
};

 

+ Recent posts