[algorithm] 백준: 3003 킹, 퀸, 룩, 비숍, 나이트, 폰
답:
chess01 = list(map(int,input().split()))
def solution(chess01):
chess = [1, 1, 2, 2, 2, 8]
sub = []
for i in range(len(chess01)):
sub.append(str((chess01[i] - chess[i]) * -1)) #[1, 0, 0, 0, 0, 1] 출력
answer = " ".join(sub)
return answer
print(solution(chess01))

문제 분석 및 해석
킹, 퀸, 룩, 비숍, 나이트, 폰 순서로 된 배열이 입력된다.
본래 한 팀의 말 개수는 1 1 2 2 2 8 이지만, 주어지는 배열에서는 빠진 갯수가 있다.
빠진 개수를 return하기
1) 내가 처음 생각한 풀이
각 index로 호출해 각각 빼주고 출력
list에 담아 출력해주기
2) 풀다보니 추가한 풀이
결과값이 말의 개수가 적은 것은 양수, 많은 것은 음수로 나와야하므로 * -1 을 해준다.
과정1.
기본 코드를 짜준다.
chess01 = list(input())
chess = [1, 1, 2, 2, 2, 8]
def solution(chess01, chess):
answer = []
for i in range(len(chess)):
c = chess01[i] - chess[i]
answer.append(c)
return answer
print(solution(chess01))
안이했음..ㅋㅋㅋ input값이 "0 1 2 2 2 7"로 문자열 입력임
그래서 추가하고 함수만으로 작동할 수 있도록 chess list도 함수 안으로 넣어주었다.
chess01 = list(map(int,input().split()))
def solution(chess01):
chess = [1, 1, 2, 2, 2, 8]
...
결과값 : [-1, 0, 0, 0, 0, -1]
과정2.
print 하면 부족한 것이 -값으로 나오고 있으니, 추가해주어야하는 양수값으로 변환하기 위해 -1을 곱해준다.
for i in range(len(chess01)):
c = chess01[i] - chess[i]
if c > 0 or c < 0:
c = c * -1
sub.append(c)
else:
sub.append(c)
어라 근데 이렇게 할필요있나? 전체에 -1 을 곱한다;
sub.append(chess01[i] - chess[i]) * -1)
#[1, 0, 0, 0, 0, 1] 출력
깔끔!
과정3.
list sub를 언패킹하여 출력해주기
print(*sub) 를 사용하면 좋겠으나 값을 반환해주어야하므로 쓸 수가 없다.
차선책으로 찾은 것이 join함수인데, 계속 오류가 난다.
return ''.join(sub)
TypeError: sequence item 0: expected str instance, int found = list안에 str이 없고 int만 있어!
answer = " ".join(str(s) for s in sub)
TypeError: 'list' object is not callable = list 객체가 불러와지지 않아!
join함수를 제대로 써본적이 없어서 이러는 것 같다..
다시 공부..
- join 함수
"".join(list이름) 으로 사용하며, "" 안에는 구분자를 넣는다.
"-".join(list) 면 사이에 -를 넣어서 출력,
"" 빈 값을 넣으면 구분자가 공백인 것과 같아 모든 요소가 딱 붙어서 나온다.
문자열만 처리할 수 있다.
- 1 0 0 0 0 1 # " ".join(sub)
- 100001 # "".join(sub)
- 1-0-0-0-0-1 #"-".join(sub)
join함수를 사용하면서 string으로 바꾸어 넣어주는 방법을 계속 시도했는데 오류가 났던 것이니
애초에 list에 넣을 때 string으로 바꾸어서 넣어주는게 좋겠다
sub.append(str((chess01[i] - chess[i]) * -1)) #list에 넣기전에 문자열 처리
answer = " ".join(sub)
return answer
빠밤... 완성..
예제 입력해보기
# 입력 : 0 1 2 2 2 7
# 출력 : 1 0 0 0 0 1
# 입력 : 2 1 2 1 2 1
# 출력 : -1 0 0 1 0 7
느낀점:
입출력과 사칙연산 단계가 끝난 기념으로 난이도를 올려(?) 여러 단계들이 필요한 문제를 풀이해보았다.
풀이하고 이 글을 쓰기까지 2시간이 걸렸당.. 헤에
좀 더 빨리 풀수 있게 계속 연습하자
중간중간 풀이를 추가하는 것은 좋지만 처음부터 빈틈없이 문제를 해석할 수 있도록 문제를 여러번 읽어보기!