๐Ÿญ์•Œ๊ณ ๋ฆฌ์ฆ˜ 3์ผ์ฐจ ๊ณต๋ถ€

๊น€ํƒœ์ธยท2022๋…„ 7์›” 21์ผ
0

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
2/9

๐Ÿ•ฐย ์‹œ๊ฐ„ ๋ณต์žก๋„ ํŒ๋‹จํ•˜๊ธฐ

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๋ž€?
    • ์ž…๋ ฅ๊ฐ’๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ์˜ ์ƒ๊ด€๊ด€๊ณ„
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐํ•˜๊ธฐ (์ตœ๋Œ€๊ฐ’ ์ฐพ๊ธฐ ์˜ˆ์‹œ)
    • ๊ฐ ์ค„์ด ์‹คํ–‰๋˜๋Š” ๊ฑธ 1๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ

      input=[3,5,6,1,2,4]
          
      for num in array:                # array ์˜ ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
              for compare_num in array:    # array ์˜ ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
                  if num < compare_num:    # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                      break
              else:
                  return num
    • array(์ž…๋ ฅ๊ฐ’)์˜ ๊ธธ์ด๋Š” N์ด๋ผ๊ณ  ํ‘œํ˜„

    • ์ฆ‰ ์œ„์— ์—ฐ์‚ฐ๋œ๊ฒƒ์„ ๋”ํ•ด๋ณด๋ฉด N * N + 1

    • Nยฒ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๊ฒ ๊ตฌ๋‚˜ ๊ณ„์‚ฐ ๊ฐ€๋Šฅ

  • ๋‘๋ฒˆ์งธ ์‹œ๊ฐ„ ๋ณต์žก๋„ ๊ณ„์‚ฐํ•˜๊ธฐ
    input = [3, 5, 6, 1, 2, 4]
    
    def find_max_num(array):
        max_num = array[0] # ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
        for num in array:  # array ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ ์‹คํ–‰
            if num > max_num: # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                max_num = num # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
        return max_num
    • 1 + 2 * N

  • ์œ„์˜ ํ‘œ๋กœ ๊นจ๋‹ฌ์•„๋ณด๊ธฐ

    • N๊ณผ Nยฒ ์€ N ์ด ์ปค์งˆ ์ˆ˜๋ก ๋” ํฐ ์ฐจ์ด๊ฐ€ ๋‚จ
    • N์˜ ์ง€์ˆ˜๋ฅผ ๋จผ์ € ๋น„๊ตํ•˜์—ฌ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋ถ„์„ํ•˜๋ฉด ์ข‹์Œ
    • ์ƒ์ˆ˜๋Š” ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†์Œ
  • ์ž…๋ ฅ๊ฐ’์ด๋ž€?

    • ํ•จ์ˆ˜์—์„œ ํฌ๊ธฐ ํ˜น์€ ๊ธธ์ด๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’

    • ์ˆ˜์‹์œผ๋กœ ํ‘œํ˜„ํ•ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ

      ๐Ÿช๊ณต๊ฐ„ ๋ณต์žก๋„ ํŒŒ์•…ํ•˜๊ธฐ

    • ์ž…๋ ฅ๊ฐ’๊ณผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ๊ณต๊ฐ„๊ณผ์˜ ์ƒ๊ด€๊ด€๊ณ„

    • ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด 1๊ฐœ์˜ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค

      # ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ• ๊ณต๊ฐ„๋ณต์žก๋„ ํŒŒ์•…  (29๊ฐœ ๊ณต๊ฐ„)
      
      input = "hello my name is sparta"
      
      def find_max_occurred_alphabet(string):
          alphabet_array = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t",
                            "u","v","w","x","y","z"] # -> 26๊ฐœ์˜ ๊ณต๊ฐ„
      
          max_occurrence = 0 # 1๊ฐœ์˜ ๊ณต๊ฐ„
          max_alphabet = alphabet_array[0] #1๊ฐœ์˜ ๊ณต๊ฐ„ 
          
          
          for alphabet in alphabet_array:
              occurrence = 0 # 1๊ฐœ์˜ ๊ณต๊ฐ„
              for char in string:
                  if char == alphabet:
                      occurrence += 1
              if occurrence > max_occurrence:
                  max_occurrence = occurrence
                  max_alphabet = alphabet
                  
          return max_alphabet
      
      result = find_max_occurred_alphabet(input)
      print(result)
      # ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ• ๊ณต๊ฐ„๋ณต์žก๋„ ํŒŒ์•…   (30๊ฐœ ๊ณต๊ฐ„)
      
      def find_max_occurred_alphabet(string):
          alphabet_occurrence_list = [0] * 26 # -> 26๊ฐœ ๊ณต๊ฐ„
      
          for char in string:
              if not char.isalpha():
                  continue
              arr_index = ord(char) - ord('a') # 1๊ฐœ์˜ ๊ณต๊ฐ„
              alphabet_occurrence_list[arr_index] += 1
      
          max_occurrence = 0 # 1๊ฐœ ๊ณต๊ฐ„
          max_alphabet_index = 0 # 1๊ฐœ ๊ณต๊ฐ„
          for index in range(len(alphabet_occurrence_list)):
              alphabet_occurrence = alphabet_occurrence_list[index] # 1๊ฐœ์˜ ๊ณต๊ฐ„
              if alphabet_occurrence > max_occurrence:
                  max_occurrence = alphabet_occurrence
                  max_alphabet_index = index
      
          return chr(max_alphabet_index + ord('a'))
      
      result = find_max_occurred_alphabet
      print("์ •๋‹ต = a ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result("Hello my name is sparta"))
      print("์ •๋‹ต = a ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result("Sparta coding club"))
      print("์ •๋‹ต = s ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result("best of best sparta"))

      โ‰๏ธย ๊ทธ๋Ÿฌ๋ฉด ๊ณต๊ฐ„์„ ๋” ์ ๊ฒŒ ์“ด ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์ด ๋” ํšจ์œจ์ ์ผ๊นŒ?

    • ๊ทธ๋ ‡์ง€ ์•Š์Œ! ์„ฑ๋Šฅ์— ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค!

    • 29์™€ 30 ๋ชจ๋‘ ์ƒ์ˆ˜๋ผ ํฐ ์ƒ๊ด€์ด ์—†์Œ

    • ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋น„๊ตํ•˜๋ฉด ๋จ

    • ์ฒซ๋ฒˆ์งธ ์‹œ๊ฐ„๋ณต์žก๋„

      for alphabet in alphabet_array:    # alphabet_array ์˜ ๊ธธ์ด(26)๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
              occurrence = 0                  # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
              for char in string:             # string ์˜ ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
                  if char == alphabet:        # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                      occurrence += 1         # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
      
              if occurrence > max_occurrence: # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                  max_alphabet = alphabet     # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                  max_occurrence = number     # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
    1. alphabet_array ์˜ ๊ธธ์ด X ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ
    2. alphabet_array ์˜ ๊ธธ์ด X string์˜ ๊ธธ์ด X (๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ + ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ)
    3. alphabet_array ์˜ ๊ธธ์ด X (๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ + ๋Œ€์ž… ์—ฐ์‚ฐ 2๋ฒˆ)
    4. ์œ„์˜ ์—ฐ์‚ฐ์‹ 26 (1 + 2 N + 3) = 52N + 104
    • ๋‘๋ฒˆ์งธ ์‹œ๊ฐ„๋ณต์žก๋„

      for char in string:        # string ์˜ ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
              if not char.isalpha(): # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
                  continue
              arr_index = ord(char) - ord('a')         # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
              alphabet_occurrence_list[arr_index] += 1 # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
      
          max_occurrence = 0        # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
          max_alphabet_index = 0    # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
          for index in range(len(alphabet_occurrence_list)):    # alphabet_array ์˜ ๊ธธ์ด(26)๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
              alphabet_occurrence = alphabet_occurrence_list[index] # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
              if alphabet_occurrence > max_occurrence: # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
                  max_occurrence = alphabet_occurrence # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
                  max_alphabet_index = index           # ๋Œ€์ž… ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰
    1. string์˜ ๊ธธ์ด X (๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ + ๋Œ€์ž… ์—ฐ์‚ฐ 2๋ฒˆ)

    2. ๋Œ€์ž… ์—ฐ์‚ฐ 2๋ฒˆ

    3. alphabet_array ์˜ ๊ธธ์ด X (๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ + ๋Œ€์ž… ์—ฐ์‚ฐ 3๋ฒˆ)

    4. ์œ„์˜ ์—ฐ์‚ฐ์‹ N ( 1 + 2 ) + 2 + 26 ( 1 + 3 ) = 3N + 106

      ๊ณต๊ฐ„๋ณต์žก๋„ ๋ณด๋‹จ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐ!

      Nยฒ์— ๋น„ํ•˜๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹˜

      ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•

    • ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์ด๋ž€?

    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ

      ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ• ์ข…๋ฅ˜

    • ์ ๊ทผ ํ‘œ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜์—๋Š”
      ๋น…์˜ค(Big-O), ๋น… ์˜ค๋ฉ”๊ฐ€(Big-ฮฉ)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋น…์˜ค(Big-O) : ์ตœ์•…์˜ ์„ฑ๋Šฅ์ด ๋‚˜์˜ฌ ๋•Œ ์–ด๋Š ์ •๋„์˜ ์—ฐ์‚ฐ๋Ÿ‰์ด ๊ฑธ๋ฆด๊ฒƒ์ธ์ง€

    • ๋น… ์˜ค๋ฉ”๊ฐ€(Big-ฮฉ) : ์ตœ์„ ์˜ ์„ฑ๋Šฅ์ด ๋‚˜์˜ฌ ๋•Œ ์–ด๋Š ์ •๋„์˜ ์—ฐ์‚ฐ๋Ÿ‰์ด ๊ฑธ๋ฆด๊ฒƒ์ธ์ง€

      def is_number_exist(number, array):
      for element in array:     # array ์˜ ๊ธธ์ด๋งŒํผ ์•„๋ž˜ ์—ฐ์‚ฐ์ด ์‹คํ–‰
              if number == element: # ๋น„๊ต ์—ฐ์‚ฐ 1๋ฒˆ ์‹คํ–‰ 
                  return True  # N * 1 = N๋งŒํผ
          return False
      
      result = is_number_exist
      print("์ •๋‹ต = True ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result(3,[3,5,6,1,2,4]))
      print("์ •๋‹ต = Flase ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result(7,[6,6,6]))
      print("์ •๋‹ต = True ํ˜„์žฌ ํ’€์ด ๊ฐ’ =", result(2,[6,9,2,7,1888]))

      ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์— ์˜ํ•ด ์†๋„๊ฐ€ ์ขŒ์šฐ๋˜๊ธฐ ๋•Œ๋ฌธ์—,

      ์ตœ์„ ์ธ ๋น… ์˜ค๋ฉ”๊ฐ€๋ณด๋‹ค, ์ตœ์•…์ธ ๋น…์˜ค๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ

    ๐Ÿญย ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ์ ‘๊ทผ ๊ธฐ์–ตํ•˜๊ธฐ

    1. ์ž…๋ ฅ๊ฐ’์— ๋น„๋ก€ํ•ด์„œ ์–ผ๋งˆ๋‚˜ ๋Š˜์–ด๋‚ ์ง€ ํŒŒ์•…
    2. ๊ณต๊ฐ„๋ณต์žก๋„ ๋ณด๋‹ค๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋” ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผ
    3. ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ์†Œ์š”๋ ์ง€(๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•)์— ๋Œ€ํ•ด ๊ณ ๋ฏผ
profile
์ฝ”๋”ฉ์ด ์ทจ๋ฏธ๊ฐ€ ๋˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€

0๊ฐœ์˜ ๋Œ“๊ธ€