본문 바로가기
wecode/기타

위코드 Codekata - 2

by 왕거 2020. 8. 30.

좀 늦었지만 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