알고리즘 풀이

[algorithm] 백준: 3003 킹, 퀸, 룩, 비숍, 나이트, 폰

째깍단 2023. 4. 20. 11:03

답:

더보기
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시간이 걸렸당.. 헤에

좀 더 빨리 풀수 있게 계속 연습하자

 

중간중간 풀이를 추가하는 것은 좋지만  처음부터 빈틈없이 문제를 해석할 수 있도록 문제를 여러번 읽어보기!