코딩/코딩도장

Python - 코딩도장&코드업 기초 100제

Claude97 2024. 1. 30. 17:03

- 파이썬, 코딩도장 Unit 44 까지

- 파이썬으로 코드업 기초 100제 올클리어
  * 가장 어려웠던 5문제 write-up 작성

 

같은 알고리즘의 문제를 풀어도 Python 숙달이 안되어 있었고, 같은듯 다른 개념이 많아

전 주보다 조금 더 걸린것 같다.

* 그리고 이건 계속 하면서 느낀건데, 추상적인 개념을 구상한 느낌의 언어라

  같은 문제라도 답이 여러가지가 나와서 재밌었다.(뭔가... 이런 개념이라면.. 이것도 되나? 하면 된다.)

코딩도장 문제가 더 어려운게 많았기에, 5문제 write-up 중 일부 포함하였다.

 

중요 내용

- Python 문법의 전반적인 학습, 활용

● 문자열 처리(슬라이싱)                            ● 반복문+조건문 활용(range, list, 튜플)

● 메서드 체이닝(변수/내부 함수 활용)       ● 리스트 응용

● 파일을 이용한 입출력 처리

 

write-up

● 코딩도장 심사문제 23.6.(지뢰찾기)

● 코딩도장 심사문제 24.5.(특정 단어 개수 세기)
● 코드업_6094(이상한 출석 번호 부르기3(py))
● 코드업_6096(바둑알 십자 뒤집기(py))
● 코드업_6097(설탕과자 뽑기(py))
● 코드업_1099(성실한 개미(py)) 

 

 

인증샷

코드업 100제.Python_1, 2
코드업 100제.Python_3, 4

 

 

 

 

 

 

 

 

 

 

 

 


ㅁ write-up

● 코딩도장 심사문제 23.6.(지뢰찾기)

본문 생략하고 코드만 첨부하였다.

지뢰찾기(py)_코드

이 문제를 풀면서, 리스트 선언과 값 참조하는걸 많이 찾아본거 같다.

- 리스트 선언

- 지뢰가 아닌경우에 자기 주변 범위의 탐색 조건( i-1<=i<i+2)

등에 주의하면서 문제를 풀었다.

 


● 코딩도장 심사문제 24.5.(특정 단어 개수 세기)

C언어로 해당 문제를 풀었을 때는

처음 보는 문자열 처리 함수들로 이것저것 찾았었다.

scanf 함수에서 개행까지 입력받기 위한 scanf("%[^\n]s") 부터,

strtok 함수로 " .," 구분자들을 없애 문자열을 벡터화 시키고

strcmp 함수로 문자열 비교하면서 포인터 주소 처리 까지. 이걸 Python 으로 푼다면!

특정문자갯수_코드

input().split() 으로 입력받은 문자열을 나누고,

list에 저장한다.(공백을 제외하여 단어로 잘림)

리스트 요소에 strip 함수를 활용하여 ' ,.' 문자를 제거하고, 비교 -> 출력

 

 

 

 

 


● 코드업_6094(이상한 출석 번호 부르기3(py))

번호를 부른 횟수(n) 만큼의 리스트를 선언하고,

입력한 값의 최솟값을 찾는 문제이다.

입력받은 값으로 리스트 선언 이후,

첫번째 요소를 최소로 잡고 반복문으로 비교하는 방식을 사용했다.

 

코딩도장에서 배운 내용을 응용하면 _2, _3 과 같은 풀이도 가능하다.

 

 

 

 

 

 

 

 

 

이상한 출석 번호_코드1

 

 

이상한 출석 번호_코드2, 3

2번의 코드는 Python 내장함수 min, 3번 코드는 리스트 정렬(sort) 를 통해 오름차순으로 정렬 후 첫번째 값(최소값)을 출력한 형식이다.

 


● 코드업_6096(바둑알 십자 뒤집기(py))

본문 내용이 길어서 따로 캡쳐하지는 않았다.

19 * 19 크기의 바둑판에서 흰돌은(1), 검은돌은(0) 으로 깔려있고,

십자 뒤집기라고 하여 고른 좌표의 x축 전체의 색을 바꾸고(0↔1) y축 전체의 색을 바꾼 결과를 출력하는 문제이다.

 

예)

(x, y) → (2, 3) 좌표 일 때,

x축 전환 : (2, 1~19(한줄)) / y축 전환 : (1~19(한줄), 3)

이 문제의 요점은

1) 리스트로 2차원 배열 생성

- 리스트를 먼저 생성하고(행), 그 안에 리스트를 요소로 선언하여 2차원 배열 생성. 그 후 0으로 안에 선언한 리스트에 채워넣었다.

 

2) 리스트 인덱스 시작에 맞춰 x, y축 좌표에서 -1 한 값으로 조건식을 작성한다.

- 리스트를 20으로 선언하고 인덱스 값으로 좌표를 사용해도 상관없다.

 

 

 

 

 


● 코드업_6097(설탕과자 뽑기(py))

모든 변수를 단일로 받을수 있지만, 서로 연관이 있는 변수들이 있다.

입력값)

세로/가로 -> 판의 크기 설정

막대의 개수 -> * 막대의 길이/방향/좌표의 객체

막대의 길이/방향/좌표(x, y) -> 특정 막대의 속성

로 생각하고 문제를 들어가보자.

 

 

 

 

 

 

 

설탕과자놓기(py)_코드

막대 하나에 속성을 나타내기 때문에 리스트로 묶어서 선언하였다.

* 추가로 검색해서 찾은건데 단순 반복 횟수가 들어간 리스트 선언은

   for _ in range(n) 을 활용하여 간단하게 할 수 있다!

n=3 이고, 막대를 A, B, C 라고 가정한다면

- 길이 방향 X Y
A        
B        
C        

의 형태로 만들어 진다.

방향(가로/세로) 에 맞춰 조건을 나누어 해결하면 된다.

+ 자꾸  C에서 푼 것과는 다르게 풀고 싶어진다. 

 


● 코드업_1099(성실한 개미(py)) 

이전 문제에서 배운 for _ in range(n) 을 통한 2차원 리스트 선언으로 판을 형성하고,

반복문 탈출 조건 : 먹이(2)를 찾았을 때 / 벽에 막혀 오른쪽, 아래도 갈수 없을 경우

이동 우선 조건 : 오른쪽 -> 아래

두 가지를 생각하면서 문제를 풀면 된다.