LeetCode 문제 중 난이도 Easy인 Flipping an Image이다. 문제 링크는 포스팅의 맨 마지막에 추가하였다. 언어는 Java를 사용했다.
문제해석
2진 행렬 A를 입력으로 받아 수평으로 뒤집은 다음 숫자를 반대로 바꾸고 결과를 반환하라.
수평으로 뒤집는것은 각 줄의 이미지가 뒤집히는 것이다. 예를들어 [1,1,0]을 수평으로 뒤집으면 [0,1,1]이 된다.
반대로 바꾸는것은 0은 1로, 1은 0으로 변환하는것이다. 예를들어 [0,1,1]은 [1,0,0]이 된다.
설명이 복잡해 보일때에는 Example을 보자. 우리가 해야 할 일은 입력 배열을 좌우로 뒤집은 뒤 0은 1로, 1은 0으로 바꿔서 반환해주기만 하면 된다.
위의 예시의 첫번째 행을 보자. A[0][2]을 temp에 넣고 A[0][2]에는 A[0][0]의 값과 1의 XOR 연산값(0을 1로, 1을 0으로)을 넣어주자. 위의 예시에서는 가운데 열인 A[0][1]은 temp에 넣을 필요 없이 A[0][1]^1만 해주면 되지만 열이 짝수인 경우에는 temp에 넣고 값을 서로 바꾸어주어야 한다. 반복문으로 전체 행에 연산해준다. XOR연산을 잘 모른다면 아래 비트연산자 포스팅을 참고한다.
2019/03/16 - [프로그래밍문제풀기] - 비트연산자란?
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Solution { public int[][] flipAndInvertImage(int[][] A) { for(int i=0 ; i<A.length; i++){ for(int j=0 ; j<(A[0].length+1)/2 ; j++){ int temp = A[i][A[0].length-j-1]; A[i][A[0].length-j-1] = A[i][j]^1; A[i][j] = temp^1; } } return A; } } | cs |
이 방법의 시간복잡도는 O(n)이고 공간복잡도는 O(1)이다.
문제 출처 - https://leetcode.com/problems/flipping-an-image/
'코딩문제(LeetCode) > Easy' 카테고리의 다른 글
[코딩연습] LeetCode Implement Queue using Stacks 스택으로 큐 구현하기 (3) | 2020.04.20 |
---|---|
[코딩연습] Occurrences After Bigram 바이그램 뒤에 나타나는 문자열 (2) | 2019.06.10 |
[코딩연습] LeetCode Lemonade Change 거스름돈 나눠주기 (0) | 2019.05.12 |
[LeetCode] Student Attendance Record I 출석기록 (0) | 2019.05.09 |
[코딩연습] Remove Outermost Parentheses 바깥 괄호 제거하기 (0) | 2019.05.05 |