코딩: 말하기 듣기 쓰기-2

Pascal's triangle

https://leetcode.com/explore/learn/card/array-and-string/202/introduction-to-2d-array/1170/

문제 보자마자 드는생각: 이게 리트코드에서 러닝섹션에 떡하니 있었다. 보자마자 당연히 for문을 기본적으로 생각을했다. 그다음에 1들 왼쪽오른쪽 합이 그 밑에 추가된다. 이걸 어떻게 해야하는지 생각을 많이 해봤지만 역시 실패. 내가 생각한것은 우선 0번째 1번째 인덱스는 무조건 [1] 이랑 [1, 1] 이걸로 해줘야한다 무조건. 그리고 나서 밑에 for문을 돌려서 어떻게 저렇게 만들지 생각을 해야하는데 도저히 모르겠다.

class Solution:
    def generate(self, numRows: int) -> List[List[int]]:
        '''
        input: numRows = 5, output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
        '''
        pascal = [[1], [1, 1]]
        if numRows <= 2:
            if numRows == 0: 
                return pascal
            elif numRows == 1 or numRows < 0: 
                return pascal[:1]
            
        for _ in range(3, numRows + 1):
            li = [1]
            for n in range(1, len(pascal[-1]) + 1):
                li.append(sum(pascal[-1][n-1:n+1]))
            pascal.append(li)
        return pascal

우선 이 방식을 그대로 따라가기로했다. 당연히 모르면 그렇게 해야지. 맨 밑에 for부분들이 굉장히 중요하게 느껴졌다. 나는 항상 for문에서 다 만들어져 나와서 리턴을 하려고 하지만, 이번 for문 풀이는 뭔가 덧붙이는 느낌이다.

프로그래머스-방문길이

문제보자마자 드는생각:
첫번째, 보자마자 아 이건 방향을 바꿔주는 네비기능 코드가 필요하다. 두번째, 이것을 바탕으로 인풋값으로 이동을하고, 문제에서 설명해주었듯이 갔던길을 가는 것은 없애는 방향으로 해야한다. 세번째, 중복된것을 없앤채로 넣을 주머니와, 순간순간 값을 넣어야할 주머니를 준비한다. 그래서 생각해 냈던 것이 스택. 하지만 아쉽게도 스택과는 거리가 먼 코드를 짰었다. 아무튼 네번째, 중복된것을 없애줄때, 이것을 미리 없애주는 것이 어떠한가? 라는 생각을 했다. 문제를 보면 갔던 방향을 없애주는 방향으로 생각을 해야하는데, 이걸 미리 없애주면 어떨까? 라는 생각이 들어 중복문자 생략을 생각했다.

https://programmers.co.kr/learn/courses/30/lessons/49994

def solutions(dirs):
	dxs, dys = [-1, 0, 1, 0], [0, -1, 0, 1]
    d = {"U":0, "L":1, "D":2, "R":3}
    visited = set()
    answer = 0
    x, y = 0, 0
    for dir in dirs:
    	i = d[dir]
        nx, ny = x + dxs[i], y + dys[i]
        if nx<-5 or nx>5 or ny<-5 or ny>5: continue
        if (x, y, nx, ny) not in visited:
        	visited.add((x, y, nx, ny))
            visited.add((nx, ny, x, y))
            answer += 1
            print((x, y, nx, ny), (nx, ny, x, y))
        x, y = nx, ny
  	return answer

나는 d를 저렇게 이쁘게 짜지 못했다. 나는 단순히 if문으로 전문용어로 "갈겼다" 라고 말할 수 있을 것 같다. 여기서 내가 생각하는 빅 포인트는, 방향, 중복, 조건을 주머니에 넣는것 이렇게 세가지라고 본다. 아직도 갈길이 먼듯..어쨌든...해야지뭐

좋은 웹페이지 즐겨찾기