좀 늦었지만 3주차 코드카타에 대해서 간단하게 정리해보자.
3주차 2일째 - 문자로 구성된 배열을 뒤집어서 반환
- 조건 1 - 문자로 구성된 배열이 입력된다.
- 조건 2 - 입력한 배열을 뒤집어서 반환할 것
- 제한 조건 - 새로운 배열을 생성할 수 없다.
- 생각한 처리 로직
- 입력받은 문자열의 길이를 구해서 그 절반 값으로 첫번째 Range를 구성한다.
- 문자열의 맨 끝에서부터 절반까지의 구역을 두번째 Range로 구성한다.
- 임시 변수를 1개 선언하고 반복문에 두 Range를 주고 두개의 인덱스로 각 배열 위치를 참조한다.
- 앞 문자를 임시변수에 저장
- 뒷 문자를 앞 문자 위치에 저장
- 임시 변수에 있는 값을 뒷 문자 위치로 저장
- 끝까지 반복 후 결과 반환
- 로직 코딩
######################################################
# 새로운 배열을 사용하지 않고, 문자열을 뒤집기
def reverseString(s):
for i, j in zip(range(len(s) // 2), range(len(s) - 1, (len(s) // 2) - 1, -1)): #두개의 range를 사용해서 하나는 앞에서, 하나는 뒤에서
temp = s[i]
s[i] = s[j]
s[j] = temp
return s
- 주어진 테스트 케이스들을 문제없이 통과하였다.
- 느낀점
- 입력받은 문자열을 뒤집어서 반환하는 간단한 문제였다.
- 배열에 사용할 수 있는 내장 메소드인 reverse()라던가 [::-1] 같은 방법이 바로 생각나서 일단은 간단하게 한번 풀어보고,
- 이후에 저런 방법을 안쓰고 해결해보려고 해봤다.
- 모델 케이스
def reverseString(s) :
a, b = 0, len(s) - 1
while a <= b:
s[a], s[b] = s[b], s[a]
a += 1
b -= 1
return s
- 모델 케이스를 통해서 굳이 임시 변수를 통해서 값을 교환할 필요가 없다는 걸 알게되었다.
- 굳이 range를 통해서 범위를 한정할 필요가 없었다.
3주차 4일째 - 주어진 숫자 배열에서 0만 뒤로 몰아넣기
- 조건 1 - 숫자로 구성된 배열이 입력된다.
- 조건 2 - 0이 아닌 숫자의 순서는 변함없이 0만 뒤로 몰아넣은 배열을 반환
- 제한 조건 - 새로운 배열을 생성할 수 없다.
- 생각한 처리 로직
- count()를 사용해서 배열속 0의 개수를 센다.
- 0의 개수만큼 반복을 하며 다음을 처리한다.
- 기존 배열에서 append()로 0을 추가한다.
- 기본 배열에서 remove()로 0을 지운다.
- 반복 후 배열을 반환한다.
- 로직 코딩
###################################################
# 숫자 배열에서 0만 뒤로 몰아넣기
def moveZeroes(nums):
target_num = nums.count(0) #0의 갯수 세기
for time in range(target_num): #0 갯수 만큼 반복
nums.append(0)
nums.remove(0)
return nums
- 테스트 케이스들을 문제없이 통과했다.
- 느낀점
- 처음에는 2일째에 진행했던 것처럼 기본 메소드들을 사용하지 않고 풀어볼 생각도 들었는데, 프로젝트와 병행하다보니 마음이 조급해졌던 것 같다.
- 기본 메소드를 쓰지 않고 풀어보는 것도 좋을 것 같다.
- 모델 케이스
def moveZeroes(nums):
last0 = 0
for i in range(0, len(nums)):
if nums[i] != 0:
nums[i], nums[last0] = nums[last0], nums[i]
last0 += 1
return nums
- 모델 케이스의 경우, 메소드 없는 풀이로 보인다.
'wecode > 기타' 카테고리의 다른 글
두번째 웹 프로젝트를 끝냈다. (0) | 2020.09.13 |
---|---|
첫번째 웹 프로젝트를 끝냈다 (0) | 2020.08.30 |
위코드 Codekata - 1 (0) | 2020.08.17 |