본문 바로가기
Learning-log/Algorithm 문풀

백준(파이썬) - 3003번 10430번(2022.10.12)

by why제곱 2022. 10. 19.

1. 3003번

 

1) 문제

 

2) 풀이

3) 문법 및 풀이과정

 

- List(리스트) 와 int()

list는 대괄호 [ ] 와 쉼표를 이용하여 숫자 모음을 간단하게 표현할 수 있다.

리스트는 어떤 자료형도 포함할 수 있으며, 심지어 비어있는 것도 가능하다.

리스트는 인덱스를 통해 각 자리 숫자를 가리키고 표현할 수 있으며 가장 앞 숫자는 0부터 시작하여 뒤로 갈 수록 1씩 증가한다. 

즉, 위의 chessnum 리스트를 예로 들자면 , chessnum[0] = 1/ chess[1]=1 / chess[2] = 2 ... 와 같이 리스트의 각 요소에 인덱스가 붙는다. 반대로 chessnum[-1]은 가장 오른쪽에 있는 요소부터 시작한다. 

 

 

chessnum = list[1,1,2,2,2,8] 로 지정했더니 typeError가 발생했다.  map은 각 요소를 지정된 함수로 처리해주는 함수이다. map(함수, 요소) 와 같은 형식으로 입력해야 한다.

따라서 list 내의 각 항목들을 int로 바꿔주기 위해서는 list(map(int,[a,b,c .. ]))와 같이 입력하면 된다.

튜플도 이와 비슷한 양식으로 입력하면 각 요소 하나하나를 정수로 저장할 수 있다.

 

뿐만 아니라 30번째 줄과 같이 input().split()을 활용하면 입력받은 값을 정수 형태로 리스트에 저장할 수 있다.

이때 입력 값은 한 줄로 띄어쓰기로 구분된 숫자를 각각의 객체로 보고 list에 저장된다.

 

혹은 int를 map을 통해 사용하지 않고 print(int(chessnum[i]) - int(a[i]), end = " " )와 같이 표현해도 결과는 동일하다.

- for (반복문)

 

 

- end = " "

문제에서 요구한 결과는 결과값의 숫자들을 공백을 사이에 두고 한 줄로 출력해야 했다. 하지만 for문에서 end=" " 없이 그냥 입력을 하게 되면 한 줄이 아니라 각 숫자가 다른 줄로 결과값이 출력됐다. 그 이유는 파이썬의 print는 기본적으로 출력값 끝에 \n을 붙이기 때문이라는 것을 알게됐다. 따라서 for문의 i가 반복될 때마다 print가 되고 이 때, 다음 줄에 출력이 되는 것이다.

end는 print 값 끝에 출력되는 \n 대신 입력될 값을 지정하는 함수이다. 따라서 end = " " 로 큰 따옴표 내에 띄어쓰기를 한 번 하고 입력하면, for문의 print가 실행된 후에도 다음 줄로 넘어가지 않고 한칸 띄어쓴 후 다음 인덱스로 넘어가기 때문에 결과값이 한 줄에 공백을 두고 나오게 할 수 있다.
 

2. 10430번

 

1) 문제

 

2) 풀이

 

3) 문법 및 풀이과정

- sep 

end와 비슷한 형식으로 사용되는 함수이다. end 는 print 뒤에 기본적으로 붙는 \n을 뒤의 큰따옴표 내의 내용으로 바꿔주는 함수 였다면, sep는 print되는 각 요소들 사이에 큰 따옴표 안에 있는 값을 입력하는 함수이다.

 

위 예제에서 sep = "\n"을 입력했으므로 결과가 출력되는 각 값 사이에 줄바꿈이 입력되어 결과가 각각 다른 줄로 출력된다. 이 함수를 사용하지 않고, 각 줄마다 새로 print를 입력하여 원하는 값이 출력되도록 해도 문제는 없다.

다만 매번 print를 반복적으로 입력해야 하는 번거로움이 발생하므로 sep함수를 활용하는 것이 효율적으로 보인다.