취업

[23.01.18] 2023 상반기 코딩테스트 로그

Nuri-KSLV-II 2023. 1. 18. 22:12

두 차례 실전 코딩테스트를 보며 회고

  • 파이썬 버림 기능을 몰라서 스플릿을 쓰다니 올림 버림 제곱 이런 기본 수학 공식은 외우자

  1. 올림
    round(실수, 표기할 자리수)
    round(실수, 2) 는 '실수를 소수 두번째 자리까지 표기하겠다'
    소수점 자리수를 지정하고 다시 수로서 계산을 할 목적이시라면 round()
    num = 3.14159265
    print(round(num,1)) #3.1
    print(round(num,2)) #3.14
  2. 버림
    f-string 표기법
    num = 3.14159265
    print(f"기존값 : {num}")
    print(f"소수점첫번째 : {num : .1f}")
    print(f"소수점두번째 : {num : .2f}")
  • ㄴ 형태 판별 ㅁ 형태 판별 처럼 은근 모양을 판별하는 문제가 많이 나온다 이런류의 문제를 많이 풀어보자

  • 그렇다 나는 비트 shift로 부분집합을 구하는 방식을 다 까먹었다.

  1. bit shift
    arr = [3,6,7,1,5,4]
    n = len(arr) #n:원소의 개수
    for i in range(1<<n): #000000~111111 #부분집합의 개수
    for j in range(n): #원소의 수만큼 비트를 비교
      if i & (1<<j): #i의 j번 비트가 1인 경우
          print(arr[j], end=",") #j번 원소 출력
    print()
  1. 재귀 + bit
def f(i, N, K):    # i 부분집합에 포함될지 결정할 원소의 인덱스, N 전체 원소개수, K 찾는 합

 if i==N:    # 한개의 부분집합 완성 0000000000~1111111111 인덱스를 1씩 늘리면서 N개와 같아졌다는것은 하나의 부분집합은 완성했다는 의미
     # print(bit, end = ' ') 0000000000~1111111111 모든 조합이 출력된걸 확인가능
     for j in range(N): # 부분집합 원소의 갯수만큼 반복
         if bit[j]: #bit[j] 값이 1이라면
             print(a[j], end = ' ')
     print()

 else:
     bit[i] = 1 #bit 조사 처럼 i가 부분집합 원소의 갯수와 같아질때까지 재귀를 돌리면 된다
     f(i+1, N, K) #인덱스i를 1씩 증가시키면서 조사 #bit[i]=1 이면 포함
     bit[i] = 0 #bit[i]=0이면 미포함
     f(i+1, N, K)
 return

N = 10
a = [x for x in range(1, N+1)] #[1,2,3,4,5,6,7,8,9,10]

bit = [0]*N

f(0, N, 55)