상세 컨텐츠

본문 제목

[프로그래머스] 비밀지도

컴퓨터 공부/알고리즘

by 주중 (zuzung) 2022. 1. 2. 14:49

본문

나는 이 문제를 푸는데 하나의 for문과 하나의 중첩 for문으로 코드를 작성했다. 그렇다면 시간 복잡도는 O(n^2)가 되므로 효율성이 낮은 코드이다. 문제를 푼 후 다른 사람의 코드를 봤더니 너무도 간단하게 작성한 코드가 있어 소개하고자 한다.

 

1. 문제

 

2. 나의 풀이

3. 다른 사람의 풀이

다른 사람의 풀이 (1)

위의 코드를 해석해보겠다.

 

1) arr1과 arr2를 zip으로 묶음 처리하여 변수 i, j에 할당한다. 그리고 할당된 변수 i, j를 OR연산하고 2진수로 바꾼다. 이 때, bin() 함수는 앞에 0b가 붙으므로 이를 제거하기 위해 [2:] 슬라이싱을 이용했다. 슬라이싱 한 값을 string 타입으로 바꾼 후 a12 에 저장한다.

 

 

2) a12 변수에 rjust 함수를 이용하여 빈 공간에 '0'을 채운다.

* rjust 함수: 우측으로 정렬하는 함수. rjust(A, B) 일 때, A에는 공백의 수를 B에는 공백을 메울 문자를 삽입한다.

* ljust 함수: 좌측으로 정렬하는 함수. ljust(A, B) 일 때, A에는 공백의 수를 B에는 공백을 메울 문자를 삽입한다.

* zfill 함수: 0을 좌측에 채우는 함수. zfill(A) 일 때, A에는 공백의 수를 입력한다.

 

 

3) replace 함수를 이용하여 '1'은 '#'으로, '0'은 공백으로 채워 리스트에 삽입한다.

 

다른 사람의 풀이 (2)

위의 코드를 해석해 보겠다.

 

1) re 라이브러리를 import 했다.

* re 라이브러리: 정규식 일치 연산을 제공하는 라이브러리

 

 

2) answer 리스트에 '#'를 삽입한 answer 리스트를 선언한다. 그 후 n 회동안 반복문을 진행한다.

 

 

3) 반복문 내에서는 answer의 i 번째 원소에 arr1의 i 번째 원소의 값과 arr2의 i 번째 원소의 값을 OR 연산하고 bin() 함수를 이용하여 2진수로 변경한다음 슬라이싱을 이용하여 앞의 0b를 제거하고, string으로 타입을 변경한다. -> 풀이 (1) 에서의 1번과 동일한 방법이다.

 

 

4) 그리고 re 라이브러리의 sub 함수를 이용하여 '1'과 '0'으로만 구성되어 있던 원소를 '#'과 공백으로 변환한다.

* re 라이브러리의 sub 함수: replace() 함수와 유사한 함수. sub(pattern, repl, string) 일 때, pattern 에는 변경할 정규 표현식을, repl 에는 검색 대상이 되는 문자열을, string에는 변경하고 싶은 문자를 삽입한다.

 

 

 

4. 느낀 점

정규표현식도 예전에 학교에서 배웠던 기억이 난다. 정말 다 쓰임이 있어서 배웠던 거라는 게 다시 한번 체감이 된다. 그 때 잘할껄~~ 미래의 나도 저렇게 생각하지 않기 위해 지금 최대한 열심히 공부해야겠다.

 

 

rjust, ljust, zfill 정보 출처: https://www.crocus.co.kr/1660

 

파이썬 rjust, ljust, zfill

rjust 오른쪽으로 정렬하도록 도와준다. rjust를 통해 공백의 수, 공백을 메워줄 문자를 넣어준다. val = "77".rjust(5, "0") print(val) val = "77777".rjust(5, "0") print(val) val = "123".rjust(5, "a") prin..

www.crocus.co.kr

 

관련글 더보기

댓글 영역