프로그래머스 문제 13, 14
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