연습장

25. 공원 산책 본문

프로그래머스/1단계

25. 공원 산책

js0616 2024. 1. 22. 15:53

park  : 공원 모양

S : 시작점

O : 이동가능

X : 장애물 

 

routes : ["방향 칸수", ... ] 

 

 

3번의 예시

O S O
O O O
O X O
O O O

 

시작점 (0,1)

 

E 2 -> 공원 이탈 -> 불가능

S 3 ->  장애물 -> 불가능

W 1 -> 가능  (0,1) -> (0,0)


 

1. S 의 좌표를 확인

2. X(장애물)의 좌표를 확인 

3. 이동 가능여부 판단

4. 이동 및 결과 

 


def solution(park, routes):
    answer = []
    start = ''
    xxx = []
    
    
    for i in range(len(park)):
        if 'S' in park[i]:
            start = [i,park[i].index('S')]
        if 'X' in park[i]:
            for k,v in enumerate(park[i]):
                if v == "X":
                    xxx.append([i,k])
    
    print("start", start)
    print('xxx', xxx )
        
    return answer

 

 

잘 저장되는것을 확인

 


 

def solution(park, routes):
    answer = [] 
    start = '' # 시작점 (h,w)
    xxx = [] # 장애물
    
    w = len(park[0]) # 가로 이동
    h = len(park) # 세로 이동
    
    # 공원 확인
    for i in range(len(park)):
        if 'S' in park[i]:
            start = [i,park[i].index('S')]
        if 'X' in park[i]:
            for k,v in enumerate(park[i]):
                if v == "X":
                    xxx.append([i,k])
    
    # 명령
    for r in routes:
        op = r[0] # 방향
        n = int(r[-1]) # 이동 거리
        
        # 공원 밖으로 나가는지?
        if op == 'E':
            if start[1] + n < w :
                start[1] = start[1] + n         
        elif op == 'W' :
            if start[1] - n >= 0 :
                start[1] = start[1] - n
        elif op == 'N':
            if start[0] - n >= 0 :
                start[0] = start[0] - n
        elif op == 'S':
            if start[0] + n < h :
                start[0] = start[0] + n

        # 장애물이 있는지?
        
    return start

 

 

장애물 X 가 없는 경우에 대해서 통과하며 3의 경우도 장애물이 없다면 이동 했을 곳인 3,0 으로 잘 이동하는것으로 확인된다.

 


로직을 조금 변경했다.

 

방향에 따라서 

- 공원 밖으로 나가는지

- 장애물에 걸리는지 

둘중 하나의 조건을 만족할 경우 count 가 1 오르게 되고

count 가 0 인 경우에 대해서만 이동 할 수 있도록 하였다. 

 

 

 

def solution(park, routes):
    answer = [] 
    start = '' # 시작점 (h,w)
    xxx = [] # 장애물
    
    w = len(park[0]) # 가로 이동
    h = len(park) # 세로 이동
    
    # 공원 확인
    for i in range(len(park)):
        if 'S' in park[i]:
            start = [i,park[i].index('S')]
        if 'X' in park[i]:
            for k,v in enumerate(park[i]):
                if v == "X":
                    xxx.append([i,k])

    # 명령
    for r in routes:
        op = r[0] # 방향
        n = int(r[-1]) # 이동 거리
        count = 0
        # 방향에 따라서 공원 밖으로 나가는지 or 장애물에 걸리는지

        for k in range(1,n+1):

            if (op == 'E') and ((start[1]+n >= w) or ([start[0], start[1]+k] in xxx)) :
                count += 1
            elif (op == 'W') and ((start[1]-n < 0) or ([start[0], start[1]-k] in xxx)) :
                count += 1
            elif (op == 'S') and ((start[0]+n >= h) or ([start[0]+k, start[1]] in xxx)) :
                count += 1
            elif (op == 'N') and ((start[0]-n < 0) or ([start[0]-k, start[1]] in xxx)) :
                count += 1
        
        # 해당되는게 없는 경우 이동
        if count == 0:
            if op == 'E':
                start[1] = start[1] + n   
            elif op == 'W':
                start[1] = start[1] - n
            elif op == 'S':
                start[0] = start[0] + n
            elif op == 'N':
                start[0] = start[0] - n
        
    return start

'프로그래머스 > 1단계' 카테고리의 다른 글

27. 붕대 감기  (0) 2024.01.22
26. 신고 결과 받기  (1) 2024.01.22
24. 달리기 경주  (0) 2024.01.22
23. 개인정보 수집 유효기간  (1) 2024.01.22
22. 바탕화면 정리  (0) 2024.01.20