https://school.programmers.co.kr/learn/courses/30/lessons/12981

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


내 풀이

 

def solution(n, words):

    answer=[]
    candi = []
    set_words = set(words)
    if len(set_words) != len(words):
        for i in range(len(words)): 
            if words[i] in candi:
                answer.append((i%n)+1,)
                answer.append(i//n+1)
                return answer
            candi.append(words[i])



    else:
        for i in range(len(words)-1):
            print(words[i][-1],words[i+1][0])
            if words[i][-1] != words[i+1][0]:
                answer.append(((i+1)%n)+1,)
                answer.append((i+1)//n+1)

                return answer
        else:
            return [0,0]        

 

def solution(n, words):
    for i in range(len(words)-1):
        
        if words[i][-1] != words[i+1][0] or words[i+1] in words[:i]: 
            return [((i+1)%n+1),((i+1)//n)+1]
    else:
        #print('for debug')
        return [0,0]

최초에 풀 때는 아예 경우를 달리두고 풀었다

1) 겹치는 단어가 있을 때는 길이가 달라지니까 그거를 셋으로 바꿔서 중복값을 없애고 길이를 비교하는 멍청한짓을 했다

2)겹치는 단어가 없을 때 끝말잇기의 규칙을 어기는 경우

 

근데 생각해보니까 그럴 필요가 없었다.

그래서 더 간단하게 풀었다. 하나 고려해야할 것은 중복검사를 할때 i+1부터 해야한다는것. 어차피 최초값은 중복일 리가 없고

i로 중복값을 검사하면 맨 마지막에 중복값이 나올경우를 거를 수가 없기 때문이다.


다른사람의 풀이

 

def solution(n, words):
    for p in range(1, len(words)):
        if words[p][0] != words[p-1][-1] or words[p] in words[:p]: return [(p%n)+1, (p//n)+1]
    else:
        return [0,0]

아니면 이분처럼 1부터 시작해도 방법일거같다.


 

'취준 > 프로그래머스' 카테고리의 다른 글

야근 지수 - 파이썬  (0) 2022.09.13
행렬의 곱셈 - 파이썬  (0) 2022.09.12
k진수에서 소수 개수 구하기 - 파이썬  (0) 2022.09.11
최고의 집합 - 파이썬  (0) 2022.09.11
주차 요금 계산 - 파이썬  (0) 2022.09.09

+ Recent posts