SWLUG(2025)/Algorithm

[SV 3주차] 가운데 글자 가져오기, 최소 직사각형, 피보나치 수

batterygj 2025. 8. 12. 00:01

Q. 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

  1. s를 매개변수로 하는 solution 함수를 정의한다.
  2. 문자열 s의 길이를 length라 한다.
  3. length를 // (정수 나눗셈 연산자)를 이용해 2로 나눈 값을 middle이라 한다.
  4. length가 짝수이면 s의 가운데 두글자를 반환하게 하고, length가 홀수이면 s의 가운데 한글자만 반환한다.

 

 

 


 

 

Q. 명함 지갑을 만드는 회사에서 지갑의 크기를 정하려고 합니다. 다양한 모양과 크기의 명함들을 모두 수납할 수 있으면서, 작아서 들고다니기 편한 지갑을 만들어야 합니다. 이러한 요건을 만족하는 지갑을 만들기 위해 디자인팀은 모든 명함의 가로 길이와 세로 길이를 조사했습니다. 아래 표는 4가지 명함의 가로 길이와 세로 길이를 나타냅니다.

 

명함 번호
가로 길이
세로 길이
1
60
50
2
30
70
3
60
30
4
80
40

가장 긴 가로 길이와 세로 길이가 각각 80, 70이기 때문에 80(가로) x 70(세로) 크기의 지갑을 만들면 모든 명함들을 수납할 수 있습니다. 하지만 2번 명함을 가로로 눕혀 수납한다면 80(가로) x 50(세로) 크기의 지갑으로 모든 명함들을 수납할 수 있습니다. 이때의 지갑 크기는 4000(=80 x 50)입니다. 모든 명함의 가로 길이와 세로 길이를 나타내는 2차원 배열 sizes가 매개변수로 주어집니다. 모든 명함을 수납할 수 있는 가장 작은 지갑을 만들 때, 지갑의 크기를 return 하도록 solution 함수를 완성해주세요.

  1. sizes를 매개변수로 하는 solution 함수를 정의한다.
  2. 명함의 가로, 세로길이를 각각 w, h라 하고 max_w와 max_h의 초기값을 0으로 한다.
  3. for문을 돌면서 w,h 중에 더 큰 값을 w라 하고 w,h 중에 더 작은 값을 h라 한다.
  4. w, h에서 각각의 최댓값을 max_w, max_h라 한다.
  5. 모든 명함을 확인한 후, 구하는 지갑의 크기인 max_w * max_h 을 반환한다.

 

 

 


 

 

Q. 피보나치 수는 F(0) = 0, F(1) = 1일때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2)가 적용되는 수입니다. 예를 들어,

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

  1. n을 매개변수로 하는 solution 함수를 정의한다.
  2. 피보나치 수에서 F(0) = 0, F(1) = 1이므로 a, b의 초기값을 각각 0, 1로 한다.
  3. 2부터 n까지 for문을 돈다. (2부터 도는 이유는 F(0), F(1)은 a, b로 정의되어 있기 때문이다.)
  4. a에는 기존의 b값을 넣고, b에는 새로운 피보나치 수인 a+b를 저장하는데, b가 너무 커지지 않게 하기위해 1234567로 나눈 나머지를 저장한다. (1234567로 나누는 이유는 문제 조건 충족을 위해서이다.)
  5. 구하는 나머지인 b를 반환한다.