프로그래머스 문제 13, 14

1 minute read

N-queen

가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 체스판의 가로 세로의 세로의 길이 n이 매개변수로 주어질 때, n개의 퀸이 조건에 만족 하도록 배치할 수 있는 방법의 수를 return하는 solution함수를 완성해주세요.

입력: n=4

출력: 2

풀이

def solution(distance, scope, times):
    list = [distance]
    for i in range(len(scope)):
        start, end = sorted(scope[i])
        work, rest = times[i]

        while start <= end:
            check = start % (work + rest) # 근무,휴식 패턴 파악하고
            if 0 < check and check <= work: # 남은 일수가 work 일수보다 낮으면 근무 인 날에 지나 감
                list.append(start) # 걸린 시간을 추가 해주고
                break   # 게임끝
            start += 1

    return sorted(list)[0]
  • 경비병의 감시구간을 하나씩 반복하면서 근무인 날에 화랑이가 지나갔는지 여부를 검사한다.
  • 만약 근무인 날에 화랑이가 지나갔으면 근무인 날을 list에 추가하고 그 중에서 최소 값을 리턴한다.

JadenCase 문자열 만들기

JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 단, 첫 문자가 알파벳이 아닐 때에는 이어지는 알파벳은 소문자로 쓰면 됩니다. (첫 번째 입출력 예 참고) 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요.제한 조건은 다음과 같습니다.

  • s는 길이 1 이상 200 이하인 문자열입니다.
  • s는 알파벳과 숫자, 공백문자(“ “)로 이루어져 있습니다.
  • 숫자는 단어의 첫 문자로만 나옵니다.
  • 숫자로만 이루어진 단어는 없습니다.
  • 공백문자가 연속해서 나올 수 있습니다.

입력: “3people unFollowed me”

출력: “3people Unfollowed Me”

내 풀이

def solution(s):
    s_split = s.split(' ')
    s_split_new = []
    for w in s_split:
        new_c = ''
        for idx, c in enumerate(w):
            if c.isdigit():
                new_c += c
            elif idx == 0:
                new_c += c.upper()
            else:
                new_c += c.lower()
        s_split_new.append(new_c)
                                
    return ' '.join(s_split_new)
  • 주어진 문자열을 리스트러 split한 뒤에 나온 각 단어의 첫번째 문자가 숫자인지, 대문자 인지 여부를 if 문으로 체크한다.
  • 여기서 c.isdigit()는 해당 character가 숫자인지 파악하는 메소드이다.

Comments