algorithm/problem solving

leetcode 48(rotate), 171(진법 변환?), 168

qkqhxla1 2020. 4. 11. 13:16

48 https://leetcode.com/problems/rotate-image/


이거 몰랐다.... 답을 보고나서야 이런 방법이 있는지 알았다. n x n의 행렬을 시계방향, 반시계로 돌리는 방법.

https://leetcode.com/problems/rotate-image/discuss/18872/A-common-method-to-rotate-the-image

class Solution(object):
    def rotate(self, matrix):
        n = len(matrix)
        for i in xrange(n/2):
            matrix[i],matrix[n-1-i] = matrix[n-1-i], matrix[i]
        for i in xrange(n):
            for j in xrange(i+1, n):
                matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]

근데 두번째로 추천 많이 받은 discussion을 보면 말이 안나온다 ㅋㅋㅋ

https://leetcode.com/problems/rotate-image/discuss/18884/Seven-Short-Solutions-(1-to-7-lines)


171 https://leetcode.com/problems/excel-sheet-column-number/


26진법의 수를 계산한다고 생각하고 하자.

class Solution(object):
    def titleToNumber(self, s):
        s = list(s)
        n = 0
        index = 0
        while s:
            if index == 0:
                n += (ord(s.pop())-64)
            else:
                n += (26**index) * (ord(s.pop())-64)
            index += 1
        return n

168 https://leetcode.com/problems/excel-sheet-column-title/


바로 위 171번과 거꾸로 버전이다. 끝자리 수를 나타내기 위해 -1을 해주면서 계산한다.

class Solution(object):
    def convertToTitle(self, n):
        s = []
        while True:
            if n < 1:
                break
            n -= 1
            s.append(n % 26)
            n /= 26
        return ''.join(map(lambda x: chr(x+65), s[::-1]))