[이것이코딩테스트다] CHAPTER 11 그리디 문제(2)

HO94·2021년 6월 26일
0

이것이코딩데스트다

목록 보기
11/14

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도 곱해버렸다.
예시 문제에 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에서 연속된 하나 이상의 숫자를 잡고 뒤집기(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))

사실 답을 봤는데, 이해가 잘 안된다.
반복되는 경우를 어떻게 인식하는지를 모르겠다..
내일 스터디할 때 물어봐야겠다

0개의 댓글