[これがコードテスト]CHAPTER 11 GRADY問題(2)


2021.06.26

<2>乗算または加算


数字
  • からなる文字列s
  • 左から右へ、数字の間に「*」または「+」演算子を付けて、最大の数字
  • にします.
  • 計算は左から右へ
  • の順で行う.

    私が書いたコード

    # s입력 받기
    s = input()
    
    # 아이디어
    # 0이 있으면 더하고, 아니면 모두 곱한다
    
    # 처음 시작 숫자
    number = int(s[0])
    
    
    for i in range(1, len(s)):
      if number == 0:
          number += int(s[i])
      else:
        if int(s[i]) == 0:
          number += int(s[i])
        else:
          number *= int(s[i])
    
    
    print(number)
    どうしてそんな答えがあるの.
    しかし、もう0万をあげようと思ったら、1を乗じた.
    例の問題では1がないので、撃たれたように見えますが、
    回答例
    # 답
    # 0과 1인경우 더하기, 나머지 곱하기
    data = input()
    
    # 첫 번째 문자를 수자로 변경하여 대입
    result = int(data[0])
    
    for i in range(1, len(data)):
      # 두 수 중에서 하나라도 0 혹은 1인 경우 더하기
      num = int(data[i])
      if num <= 1 or result <= 1:
        result += num
      else:
        result *= num
    
    print(result)

    <3>文字列の反転


    質問する
  • 0と1からなる文字列s
  • sでは、1つまたは複数の連続する数字(0->1,1->0)
  • をキャプチャして反転する.
  • は同じ最小反転数
  • である.
    # s 입력 받기
    s = input()
    
    # 아이디어
    # 가장 처음 반복되는 숫자를 뒤집는다
    
    # 뒤집기 수
    count = 0
    
    number = []
    for j in range(0, len(s)-1):
      if int(s[j]) != int(s[j+1]):
        count += 1
    
    print(count)
    最初は重複した数字を抽出して、そのグループで計算したいと思っていました.s010001なら、どうやって000を選べばいいのかわからず断念.
    回答例
    data = input()
    count0 = 0
    count1 = 0
    
    if data[0] == '1':
      count0 += 1
    else:
      count1 += 1
    
    for i in range(len(data) -1):
      if data[i] != data[i+1]:
        if data[i+1] == '1':
          count0 += 1
        else:
          count1 += 1
    print(min(count0, count1))
    実は私は答えを見て、私はあまり理解していません.
    缲り返すことをどう认识するか分からない.
    明日勉強するときに聞かなければなりません.