프로그래밍 /Python

[Python] for ~ else

yooj_lee 2021. 12. 9. 04:07
300x250

프로그래머스에서 알고리즘 스터디를 진행 중인데 오늘 처음으로!!! for ~ else 문을 알게 되었다. 간단하게 말하자면, for loop이 break 없이 끝날 경우에 else문을 실행하는 것. break든 아니면 break 없이 모든 loop을 다 돌았든 for loop을 탈출했을 때 무조건 그 아래에 statement가 있으면 수행을 해야 한다. 하지만, 어떤 경우에는 loop을 정상적으로 탈출한 경우에만 statement를 수행하고 싶을 경우가 있을 것이다. 이럴 경우 flag를 달아주든지 해야하는데 for ~ else문을 사용하게 되면 이런 flag의 사용을 막을 수 있다.

프로그래머스 스킬 트리 문제(https://programmers.co.kr/learn/courses/30/lessons/49993)로 예를 들겠다. 이 문제의 경우에는 각 skill_tree 내의 skill을 탐색하면서 skill 순서가 주어진 "skill" 변수에 맞지 않는다면 해당 skill_tree의 탐색을 종료하고 다음 skill_tree로 넘어가야 한다. 반면, skill 순서가 주어진 "skill" 변수에 맞는다면 answer 변수값을 하나 더 키워줘야 한다.

이 경우가 바로 break를 통해 for loop이 종료가 된 것인지 혹은 탐색이 완료가 되었기 때문에 for loop이 종료가 된 것인지 모르는 경우이다. 따라서 for~else를 사용해서 구현해주거나, 혹은 break 앞에 flag 변수를 False로 두어서 for loop 이후의 statement가 정상적으로 동작하도록 해야 한다.

from collections import deque

def solution(skill, skill_trees):
	answer = 0

	for skill_tree in skill_trees:
		skill_list = deque(skill) 
		for s in skill_tree:
			if s in skill and s != skill_list.popleft():
				break
		else:
				answer += 1
	
	return answer
    
 
 ## for else 사용 안할 경우
 def solution(skill, skill_trees):
 	answer = 0
    
    for skill_tree in skill_trees:
    	flag = True
    	skill_list = deque(skill)
        for s in skill_tree:
        	if s in skill and s != skill_list.popleft():
            	flag = False
            	break
        if flag:
        	answer += 1
    
    return answer
300x250