#방법1
N=input()
l=list(map(int, N))
N=int(N)
a=N
cnt=0
sum=0
while(True):
if N>=10:
sum=int(l[0]+l[1])
sum=sum%10
new=int(str(l[1])+str(sum))
N = new
l=list(map(int, str(new)))
cnt=cnt+1
else:
new=int(str(N)+str(N))
N=new
l=list(map(int, str(new)))
cnt=cnt+1
if a==new:
break
print(cnt)
위의 방법1은 내가 처음 이 문제를 풀었던 방법이다.
그냥 문제에서 주어진대로 각 자릿수를 쪼개어 더하고, 리스트에 넣기도 하고..
좀 더럽지만 정석대로 풀었다.
아래의 방법2는 다른 사람의 코드를 보고 다시 코드를 짜봤다.
같은 문제인데 길이가 확연하게 다르다.
문제에 너무 집중하기보다는, 규칙성이나 문제 해결에 좀 더 집중해야 이러한 코드 작성이 가능해질 것 같다.
#방법2
a=int(input())
result=a
count=0
while True:
ten=a//10
one=a%10
sum2=ten+one
count=count+1
new2=int(str(one)+str(sum2%10))
a=new2
if(result==new2):
break
print(count)
이 방법2는 각 자릿수를 쪼개고, 필요한 부분만 바로바로 빼다 썼다.
몇 시간동안 매달렸던 문제였지만, 결국 스스로 못풀어냈다.
접근 방법은 비슷했지만, 알고리즘을 적용할 위치에 따라서 불필요한 코드들을 제거할 수 있는데,
너무 뒤에서 써서 앞에 불필요한 잔코드들이 많았다. 답도 틀렸고..이건 왜인지 모르겠음
일단 정답 코드는
그냥 두면 나중에 해석 못할까봐 주석을 적은 코드를 아래에 작성하였다.
import sys
a=sys.stdin.readline().strip()
c=['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='] #크로아티아로 변경가능한 알파벳을 리스트에 저장
result=0 #결과값을 반환할 변수
for i in c: #크로아티아로 변경가능한 문자열을 반복문으로 하나씩 넣어보기
a=a.replace(i, '*') #입력받은 문자열에 해당 크로아티아로 변경가능한 문자열이 있다면, 해당 문자열을 임의의 한 문자로 변경해주기
#=> 그래야 갯수를 셀 때, 하나로 치고 셀 수 있음
print(len(a))
보통 문자열에서 특정 문자를 제거하기 위해서는 .replace("제거할 문자", "") 이러한 형태로 많이 쓰는데
이 문제에서는 "*"가 아닌 ""를 쓰면 오답이 나온다.
3번 예시인 nljj를 보면 크로아티아 문자를 모아둔 리스트를 반복문을 돌면서 해당 문자열에 크로아티아 문자가 있을 경우 replace하게 되는데, 이 때 ""를 써버리면 lj를 삭제하여 nj만 남게 되고, nj가 다시 크로아티아 알파벳에 해당되기 때문이다.
원래는 크로아티아 알파벳이 아닌데 크로아티아 알파벳으로 인식하게 되어 오답이 나오는 것이다.
대부분은 ""를 쓰지만, 경우에 따라 "*"를 씀으로써, 제약을 걸어야되는 경우도 잊지 말자.
그리고
*replace를 쓴다고 해도 원래 문자열은 바뀌지 않기 때문에, 반드시 replace사용 후 변수에 담아줘야 문자열이 바뀐다.*
그리고 아래는 내가 시도했던 방법.
해당 단어가 나오면 지워주는 알고리즘을 너무 뒤에 써서 앞에 잔 코드들이 많다.
예제 샘플 넣었을 땐 다 잘나왔는데 일단 답이 틀림.. 어디서 로직이 하나 잘못된듯
그리고 정답 코드와 비교해보면, 해당 문자가 나오면 삭제하는 로직에서
a.replace(i, '')이렇게 삭제하고 카운트를 별도로 셌는데
어차피 그 문자는 크로아티아 알파벳 하나로 치니까 임의의 문자 *하나를 넣어서
아예 문자 길이 셀 때 카운트도 같이 셀 수 있게 해야 더 좋은 코드..
a=a.replace(i, "*")
앞으로 잘 활용해야지
'코딩 문제' 카테고리의 다른 글
백준 - 단어정렬 (조건이 있는 정렬) (0) | 2022.07.21 |
---|---|
백준 골드바흐의 추측 (0) | 2022.07.12 |
백준 달팽이는 올라가고 싶다/에라토스테네스의 체 (0) | 2022.07.07 |
백준 그룹단어 체커 (0) | 2022.07.06 |
백준 문제 풀이 메모( 7/5 수정) (0) | 2022.07.05 |