전체 글
-
[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★2021.07.30
-
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★2021.07.29
-
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★2021.07.29
-
[백준 파이썬 2577번]1차원 배열, 숫자의개수2021.07.28
-
[Python] for문활용 X보다 작은 수 백준 10871번 FOR문 문제2021.07.27
[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★
#1 내방식
import sys
import random
while True:
print("몇번 반복하실껀가요? " , end = ' ')
TestCase = int(sys.stdin.readline())
if TestCase<0 or TestCase>80:
print("테스트케이스 값 다시 입력하세요.")
else:
break
for i in range(TestCase):
midscore = 1
finscore = 0
b =1
OX = ['O','X']
OX = OX*random.randrange(3,10)
random.shuffle(OX)
#print("len(OX) - 1 = {} ".format(len(OX)-1))
for j in range(0,len(OX)-1):
if OX[j] == 'O' : #'O'가있다면
if OX[j+1] == 'O' : #뒤인덱스에 'O'가있다면
b+=1 #연속횟수 1더하기
midscore+=(1*b) #임시저장소에 (1*연속횟수)값 더하기
if j==(len(OX)-2):
finscore+=midscore
if OX[j+1] == 'X': #뒤에 인덱스가'X'라면
if b>=2: #임시저장소가 한번의 연속성을 가졌다면 뭐 b>=2 이렇게 해도 될듯
finscore += midscore #최종저장소에 임시저장소값 더하기
midscore =1 #임시저장소값 1로 초기화
b =1 #연속횟수값 1로 초기화
else:
continue
print(OX)
print("점수계산 : ",finscore)
Random 함수를 사용하여 풀어보았다.
★★★★1. random.randomrange(3,6) ===> 3부터 5까지의 수의 랜덤으로 추출
2. random.shuffle(객체) ===> 객체의 값들을 섞어준다!
18번째줄 range(0,len(OX) -1) ===> len(ox) -1 을 한 이유 : OX[j+1] 값을 처리할때 len(ox)로 하면 범위가 넘어가게 된다.
23번째줄 if문 ==> j == (len(ox) - 2) 한 이유 : 인덱스의 경우 길이보다 하나 작은 값으로 생각해야 한다. len(OX)-2 의 인덱스는 뒤에서 두번째를 의미한다. j값이 뒤에서 두번째의 인덱스 순서가 왔을때 뒤에서 두번째와 마지막이 'O'일경우 for문을 종료해주고 finscore에 저장값을 저장해야 하므로 이렇게 설정했다.
25번째줄 OX[j+1] == 'X' ==> 23번째줄과 비슷하게 'X'가 나오면 반복문을 중지 시켜야한다.
26번째줄 if문을 통해 연속횟수가 2회이상일경우 finscore에 중간값을 더하기하여 저장시키고 minscore와 연속횟수의미하는 b값을 1로 초기화 시켜준다.
#2 내방식_2 (SPLIT 함수 활용)
import sys
import copy
chul = []
while True:
TestCase = int(sys.stdin.readline())
if TestCase < 0 or TestCase > 80:
print("테스트케이스 값 다시 입력하세요.")
else:
for i in range(TestCase):
midscore = 1
finscore = 0
b = 1
OX_3 = []
OX = list((sys.stdin.readline().split('X'))) #'X'로 분류
OX_2 = copy.deepcopy(OX) #OX_2에 OX 복사
while '' in OX_2: #'X'로 분류를 했기때문에 빈 요소로 출력되는 부분이 있다.
#이를 ''이 OX_2에 있을때까지 반복한다.
OX_2.remove('') #OX_2리스트에서 빈 요소 ''를 삭제한다.
print("OX_2 리스트 : " , OX_2)
for k in range(len(OX_2)): #이제 OX_2리스트의 길이만큼 반복
OX_3.append(OX_2[k].count(str('O'))) #'O'가 몇개있는지 COUNT하여 OX_3리스트에 추가한다.
print("OX_3 리스트('X'이전의 'O'의 갯수 정리해놓은 리스트) : " , OX_3)
for p in range(len(OX_3)): #OX_3 리스트의 길이만큼 반복
midscore = 1
b=1
if OX_3[p]>=1: #OX_3의 요소는 X가 나오면 분류해놓은 곳에서
for q in range(int(OX_3[p])-1): #중요!!!!!!!!!!! : 'O'개수의 이전까지의 RANGE 설정!!!
#왜냐하면 midscore를 애초에 1로 설정했기 때문
b+=1
midscore += (1*b)
finscore+= midscore
chul.append(finscore)
break
for i in range(len(chul)):
print("점수 계산 : " ,chul[i])
#3 구글링 방식(객체에 List 저장하기)
import sys
import random
while True:
print("몇번 반복하실껀가요? " , end = ' ')
TestCase = int(sys.stdin.readline())
if TestCase<0 or TestCase>80:
print("테스트케이스 값 다시 입력하세요.")
else:
break
for i in range(TestCase):
midscore = 1
finscore = 0
b =1
OX = ['O','X']
OX = OX*random.randrange(3,10)
random.shuffle(OX)
#print("len(OX) - 1 = {} ".format(len(OX)-1))
for j in range(0,len(OX)-1):
if OX[j] == 'O' : #'O'가있다면
if OX[j+1] == 'O' : #뒤인덱스에 'O'가있다면
b+=1 #연속횟수 1더하기
midscore+=(1*b) #임시저장소에 (1*연속횟수)값 더하기
if j==(len(OX)-2):
finscore+=midscore
if OX[j+1] == 'X': #뒤에 인덱스가'X'라면
if b>=2: #임시저장소가 한번의 연속성을 가졌다면 뭐 b>=2 이렇게 해도 될듯
finscore += midscore #최종저장소에 임시저장소값 더하기
midscore =1 #임시저장소값 1로 초기화
b =1 #연속횟수값 1로 초기화
else:
continue
print(OX)
print("점수계산 : ",finscore)
'Python(백준) > 배열' 카테고리의 다른 글
[Python] 백준 2562번 최대값 (0) | 2022.09.14 |
---|---|
[백준 파이썬 4344번]1차원 배열, 평균은 넘겠지 ★객체LIST저장방법★but아직 미구현 (0) | 2021.07.31 |
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★ (0) | 2021.07.29 |
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★ (0) | 2021.07.29 |
[백준 파이썬 2577번]1차원 배열, 숫자의개수 (0) | 2021.07.28 |
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★
import sys
import copy
while True: #N의 갯수 판독을위 한 while문
try: #입력값들이 없을경우 except 구문 실행하여 종료
N = int(sys.stdin.readline()) #N의 값 받아보기
if N<0 or N>1000:
print("N의 값 다시 입력하세요")
else: #N의값이 맞을경우
while True:
a= list(map(float,sys.stdin.readline().split(' ')))
#a객체에 map함수를 활용하여 float형태로 리스트에 빈칸띄우면 저장한다
if len(a) != N: #N의개수와 a리스트에 저장되어있는 요소의 개수가 다르다면
print("과목 개수가 {}개 입니다. 다시입력하세요.".format(len(a)))
elif len(a) == N: #N의 개수와 a리스트에 저장되어있는 요소의 개수가 같다면
for i in range(len(a)):
if a[i]<0 or a[i]>100:
print("점수의 범위는 0점이상 100점이하입니다. 다시입력하세요")
else:
break
except:
break
zozak = copy.deepcopy(a) #deepcopy를 하게되면 a객체와 zozak 객체는 다른 객체
#그냥 copy()를 하게되면 연동되어있는 객체가 된다.
chadae = max(a) #max함수를 통해 chadae변수에 저장
average = 0
for i in range(len(a)):
zozak[i] = (a[i]/chadae)*100
average += float(zozak[i])
print(zozak)
print("{:.6f}".format(average/ len(a))) #소수점6자리까지 float형태로 출력해라
11번째줄 a = list(map(float,sys.stdin.readline().split())) ==> 이부분 헷갈렸는데, 한 변수(객체)안에 여러개의 값들을 map함수를 활용하여 리스트화 하여 저장할수 있음을 기억해야겠다.
23번째줄 deepcopy() == >깊은 복사 와 copy()==>얕은 복사 의 차이점 꼭 기억하기!!!
31번째줄 format함수 표현법 잘기억하기!!!
'Python(백준) > 배열' 카테고리의 다른 글
[Python] 백준 2562번 최대값 (0) | 2022.09.14 |
---|---|
[백준 파이썬 4344번]1차원 배열, 평균은 넘겠지 ★객체LIST저장방법★but아직 미구현 (0) | 2021.07.31 |
[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★ (0) | 2021.07.30 |
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★ (0) | 2021.07.29 |
[백준 파이썬 2577번]1차원 배열, 숫자의개수 (0) | 2021.07.28 |
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★
import sys
i=0
before = []
after = []
while i<10:
try:
A= int(sys.stdin.readline())
if A<0 or A>1000:
print("입력 다시하세요.")
else:
before.append(A)
i+=1
except:
break
b=0
count = 0
after_2= []
c = []
for i in range(10):
b = before[i] %42
after.append(b) #after 리스트의 각 인덱스에 42로 나눈 나머지 요소들 저장
print(after)
after_2 = set(after)
print(after_2)
print(len(after_2))
★★★★이문제는 SET함수를 모르면 못푸는 문제다★★★★
SET함수는 중복값을 제외하고 출력하게 해주는 함수이다..
중복값 제외하고 LEN함수를 통해 길이를 구하면 갯수를 알 수있을것이다!!
위 결과값에서의 리스트는 print(after)를 이용해 구한 결과값이다.
print(after_2)를 하게되면 [0,1,2,39,40,41] 이렇게 구해주게 된다.
★★★즉 SET함수는 중복값은 없애고 하나로 합쳐주는 기능이라 보면된다!!!★★★
'Python(백준) > 배열' 카테고리의 다른 글
[Python] 백준 2562번 최대값 (0) | 2022.09.14 |
---|---|
[백준 파이썬 4344번]1차원 배열, 평균은 넘겠지 ★객체LIST저장방법★but아직 미구현 (0) | 2021.07.31 |
[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★ (0) | 2021.07.30 |
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★ (0) | 2021.07.29 |
[백준 파이썬 2577번]1차원 배열, 숫자의개수 (0) | 2021.07.28 |
[백준 파이썬 2577번]1차원 배열, 숫자의개수
import sys
while True:
try:
A = int(sys.stdin.readline())
B = int(sys.stdin.readline())
C = int(sys.stdin.readline())
if A<100 or A>=1000 :
print("A값 다시입력하세요.")
if B<100 or B>=1000 :
print("B값 다시입력하세요.")
if C<100 or C>=1000 :
print("C값 다시입력하세요.")
elif B<100 or B>=1000:
print("B값 다시입력하세요.")
if C<100 or C>=1000 :
print("C값 다시입력하세요.")
else:
if C<100 or C>=1000:
print("C값 다시입력하세요.")
else:
break
except:
break
a = A*B*C
print(a)
index=0
#print(a)
b = list(str(a))
print(b)
for j in range(10):
print(b.count(str(j)))
import sys
while True:
try:
A = int(sys.stdin.readline())
B = int(sys.stdin.readline())
C = int(sys.stdin.readline())
if A<100 or A>=1000 :
print("A값 다시입력하세요.")
if B<100 or B>=1000 :
print("B값 다시입력하세요.")
if C<100 or C>=1000 :
print("C값 다시입력하세요.")
elif B<100 or B>=1000:
print("B값 다시입력하세요.")
if C<100 or C>=1000 :
print("C값 다시입력하세요.")
else:
if C<100 or C>=1000:
print("C값 다시입력하세요.")
else:
break
except:
break
a = A*B*C
index=0
b = list(str(a))
for j in range(10):
for i in range(len(b)):
if str(j) in b[i]:
index+=1
print(index)
index=0
2번째 만든게 내가 만든거 ==> 이중 for문 활용하여 추출 해보았다.
입력값 받을때 A,B,C = map(int, input().split()) ==> A,B,C "ENTER" 해야 입력
for j in range(10) ==> j는 리스트 b속에 있는 요소들 검사하는 숫자 역할
1번째
리스트.count(검사할 요소) 함수로 검사할요소가 리스트내에 있다면 count해라 ==> 쉽다.
'Python(백준) > 배열' 카테고리의 다른 글
[Python] 백준 2562번 최대값 (0) | 2022.09.14 |
---|---|
[백준 파이썬 4344번]1차원 배열, 평균은 넘겠지 ★객체LIST저장방법★but아직 미구현 (0) | 2021.07.31 |
[백준 파이썬 8958번]1차원 배열, OX 퀴즈 ★객체LIST저장방법★ (0) | 2021.07.30 |
[백준 파이썬 3052번]1차원 배열, 평균구하기 ★객체저장방법(map)★ (0) | 2021.07.29 |
[백준 파이썬 3052번]1차원 배열, 나머지 구하기 ★SET함수★ (0) | 2021.07.29 |
[Python] while문활용 새로운수 만들기 사이클 횟수 세어보기 백준 1110번 while문 문제
import sys
while True:
N = int(sys.stdin.readline())
if N<0 or N>99:
print("N값의 범위는 0보다 크거나 같고, 99보다 작거나 같습니다.")
else:
break
first, second ,sum , new , new2 = 0 ,0,0,0,0 #v파이썬식 변수 선언
i =0
while(True):
if N//10 <1 :
N = N*10
if N==0:
i+=1
break
else :
new1 = N #new1 변수에 N값 집어넣기
while True:
first = new1//10 #1번째 자리수 추출
second = new1%10 #2번째 자리수 추출
sum = first +second #1번째 자리수와 2번째 자리수 더하기
new2 = (second * 10) + (sum%10) #두번째 자리수를 첫번째 자리로
#더한값의 두번째자리수를 두번째 자리로해서 합치기
#second*10을 함으로서 1번째자리수는 0이다.
new1 = new2 #새로운수를 다음에 이어갈 변수로 저장
i+=1
if new2 == N:
break
break
print(i)
변수 선언에 대한 정의 잘 이해해야하고, new1과 new2헷갈리면 안된다.
0일경우 무한루프를 돌수있으므로 따로 if문을 통해 재 설정 해준다.
'Python(백준) > while문' 카테고리의 다른 글
Python] while문 활용 X+Y값 출력(EOF활용) 백준 10951번 while문 문제 (0) | 2021.07.27 |
---|
Python] while문 활용 X+Y값 출력(EOF활용) 백준 10951번 while문 문제
EOF란? ==> End OF File로서 종료시켜주라 이런 의미
import sys
Sum = []
i=0
while True:
A,B = map(int, sys.stdin.readline().split())
if A<0:
print("A값 다시 입력하세요.")
if B>10:
print("B값 다시 입력하세요.")
else :
if B>10:
print("B값 다시 입력하세요.")
else:
if(A==0 or B==0):
break
else :
Sum.append(A+B)
for i in range(len(Sum)):
print(Sum[i])
try 구문을 통해 A,B입력이 받아졌을경우에 While문 실행할 코드로 작성
except 구문을 통해 A,B입력이 받아지지 않았을경우 While문 탈출
Sum 리스트에 있는 값들 출력
'Python(백준) > while문' 카테고리의 다른 글
[Python] while문활용 새로운수 만들기 사이클 횟수 세어보기 백준 1110번 while문 문제 (0) | 2021.07.27 |
---|
[Python] for문활용 X보다 작은 수 백준 10871번 FOR문 문제
import sys
while True:
N,X = map(int, sys.stdin.readline().split()) #N,X값입력 받기
if N<1 :
print("N값 다시 입력하세요") #N값 틀렸을때
if X>10000:
print("X값 다시 입력하세요") #N값 & X값 틀렸을때
else : #N값 1보다 클때
if X>10000: #N값 맞고 X값 틀렸을때
print("X값 다시 입력하세요")
else:
break #N값 맞고 X값 맞았을때 while문 탈출
while True:
s = input().split() #s리스트에 저장
if len(s) > N or len(s)<N: #N개의 숫자만 입력하게끔 조건
print("{}개의 숫자 개수를 입력하시오.".format(N))
else :
break
Num = []
for i in s:
if int(i)<X :
Num.append(i) #Num리스트에 X입력값보다 낮은 값들 저장
for i in range(len(Num)): #Num리스트의 길이만큼 반복
print(Num[i], end =' ') #end = ' '를 통해 리스트값들을 일렬로 출력
리스트 일렬로 출력하고 싶을때 end= ' ' 기억하기!
'Python(백준) > for문' 카테고리의 다른 글
[Python] Input 함수에 범위를 지정해보자!_3(While 문 활용) 백준 10950번 A+B 출력 문제 (0) | 2021.07.26 |
---|
[Python] Input 함수에 범위를 지정해보자!_3(While 문 활용) 백준 10950번 A+B 출력 문제
은근 A,B 범위를 주는데 헷가리는 경우가 많은거 같다
i = int(input())
List = []
k = 0
while i> k :
A , B = map(int, input().split())
while True : #1번째
if A<=0 :
print('A값이 틀렸습니다. A값 수정하세요')
if B>= 10:
print("B값이 틀렸습니다. B값 수정하세요")
else : #A가 0보다 클때
while True: #2번째 while
if B>=10: #B가 10보다 클때
print("B값이 틀렸습니다. B값 수정하세요") #출력
break #B값이 10보다 클때 2번째 While문에서 벗어남
else :
List.append(A+B)
k+=1
break
break #else문에서 벗어나기
break #1번째 while문에서 벗어나기 A값이 틀렸을경우
for j in range(len(List)):
print(int(List[j]))
print(range(i))
코드 분석 :
1째줄 : i에 input값을 받아 출력횟수 정하기
2~3 째줄 : List , k 초기화
4째줄 : 출력횟수가 k변수보다 작으면 while문 종료
5째줄 : A,B 받기
6째줄 : 반복문 WHILE
7~10 째줄 : A값만 틀리면 8째줄 출력 A,B 틀리면 8,10 출력 ==> else문 미 실행 ==> 21번째 break문 실행
==> 6번째 while문 탈출 ==> 다시 5 번째줄 재실행
12~ 20째줄 : B값이 10이상일때 15번째 print문 실행후 16번째 break문으로 인한 13번째 while문 탈출 ==> 21번째 break문 실행 ==> 6번째 while문 탈출
17번째 else문 :
List의 리스트에 A+B값 추가 ==> k에 1더하기(횟수) ==> k는 위의 값이 틀렸을경우 더해져선 안된다.
==> k값이 5가 되었을때 4번째 while문 탈출
'Python(백준) > for문' 카테고리의 다른 글
[Python] for문활용 X보다 작은 수 백준 10871번 FOR문 문제 (0) | 2021.07.27 |
---|