<솔민 - 백준 2309번 일곱 난쟁이>
from sys import stdin
import random
Nlist = []
for i in range(9):
A = int(stdin.readline())
Nlist.append(A)
# 난수 생성 함수
def numnum():
while(1):
num = random.randrange(1, 10)
num2 = random.randrange(1, 10)
if num != num2:
break
alist = [num, num2]
return alist
while(1):
reList = Nlist
numList = numnum()
reList[numList[0]-1]= 0
reList[numList[1]-1]= 0
result = 0
for cha in reList:# 100이면 브레이크
result += cha
if result == 100:
break
reList.sort()
for cha in reList:
print(cha)
from sys import stdin
Nlist = []
for i in range(9):
A = int(stdin.readline())
Nlist.append(A)
re ='no'
for i in range(8):
if re == 'okay': # !!
break
for K in range(i+1, 9):
if sum(Nlist)-Nlist[i]-Nlist[K] == 100:
Nlist.pop(i)
Nlist.pop(K-1)
re= 'okay'
break
Nlist.sort()
for cha in Nlist:
print(cha)
# !! 부분은 반복문을 두번 탈출해야 한다는 점에서 추가한 부분이다! 이런 상황에 쓰면 좋을 듯하다.
i 는 무조건 K보다 크고, i 를 pop 하고 나면 인덱스번호가 하나씩 땡겨지기 때문에 k-1이라고 써야 한다!
Nlist = []
for i in range(9):
A = int(stdin.readline())
Nlist.append(A)
이 복잡한 식을! 이렇게! 바꿀 수 있음!
Nlist = [int(stdin.readline()) for _ in range(9)]
<수연 - 백준 2504번 괄호의 값>
from sys import stdin
Nlist = list(map(str,list(stdin.readline().replace('\n', ''))))
# () 아니면 0
def this(a,b):
Aa = 0
if a =='(' and b==')':
Aa = 2
if a =='[' and b ==']':
Aa = 3
return Aa
# 숫자 처리 함수 1 (숫자)
def that(a,b,c):
Aa = 0
if a =='(' and type(b) == int and c ==')':
Aa = b * 2
if a =='[' and type(b) == int and c ==']':
Aa = b * 3
return Aa
# 숫자 처리 함수 2 숫자숫자
def thatthat(a,b):
Aa = 0
if type(a) == int and type(b) == int:
Aa = a + b
return Aa
# 처음단계 숫자 넣기
for i in range(len(Nlist)-1):
This = this(Nlist[i],Nlist[i+1])
if This != 0:
Nlist[i] = This
Nlist[i+1] = 'Nope'
while(1):
try:
Nlist.remove('Nope')
except:
break
while(1):
A = len(Nlist) # !!!
# 숫자 처리1
for i in range(len(Nlist)-2):
That = that(Nlist[i],Nlist[i+1],Nlist[i+2])
if That != 0:
Nlist[i] = That
Nlist[i+1] = 'Nope'
Nlist[i+2] = 'Nope'
while(1):
try:
Nlist.remove('Nope')
except:
break
# 숫자 처리2
for i in range(len(Nlist)-1):
ThatThat = thatthat(Nlist[i],Nlist[i+1])
if ThatThat != 0:
Nlist[i] = ThatThat
Nlist[i+1] = 'Nope'
while(1):
try:
Nlist.remove('Nope')
except:
break
if len(Nlist) == 1:
break
if A == len(Nlist): # !!!
Nlist = [0]
break
for cha in Nlist:
print(cha)
음 완성했다! 파이썬 통합개발환경이랑 비주얼스튜디오코드에선 잘 돌아가지만~
백준 99퍼센트에서 틀렸습니다가 떴다~
하..이럴 땐 어디를 어떻게 고쳐야 하지...?
처음으로 질문을 올렸다
답변달아주셨으면
# !!! 이 두 부분
아까와 같은 이해되지 않는 부분이다.
A = len(Nlist)가 아니라 원래 A = Nlist 였다.
중간에 Nlist의 값을 건드리는 코드가 있는데, 만약 이게 건드려지지 않는다면 이프문으로 반복문을 나갈 생각으로
코드 이전 Nlist를 A에 저장해서 비교하려 했다.
그리고 아까와 같이 Nlist가 바뀌면 A 값도 같이 바뀌어버리는 일이 일어난다..
A에 B를 넣었는데,
B가 바뀌면,
A도 바뀌어버린다.
1. "A에 B를 넣었는데," 가 'B에 들어있었던 값을 넣은 것' 이라는 게 내 생각이었고
2. "A에 B를 넣었는데," 가 'B 자체를 넣은 것' 이라는 게 내가 짠 코드에서 일어나는 일인 것 같다.
이런 설정을 Call by reference / call by value 로 분류하는 것 같다.
1번이 call by value
2번이 Call by reference 인가?
근데 파이썬은 둘 다 아니고 Call by assignment 라고 한다.
놀랍게도
B = [1, 2]
A = B
B.pop(1)
print(A, B)
# [1] [1] 출력됨
이건 바뀌고
B = [1, 2]
A = B
B = [3, 4]
print(A, B)
# [1, 2] [3, 4] 출력됨
이건 안 바뀐다
뭐냐 대체
일단
자야겠다
'✨ Club|Project > Ec.crew 코딩 스터디' 카테고리의 다른 글
🫐Ec.crew 2기 1회차 OT🫐 (0) | 2022.08.31 |
---|---|
🍇Ec.crew 1기 마무리/되돌아보기🍇 (0) | 2022.08.30 |
Ec.crew 8회차 정기 모임 문제 (0) | 2022.08.22 |
Ec.crew 7회차 정기 모임 문제 (2) | 2022.08.15 |
🫐Ec.crew 2기 모집!🫐 (0) | 2022.08.13 |