전체 글

728x90
반응형

8958번 문제

#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)
728x90
반응형
728x90
반응형

1546번 문제

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함수 표현법 잘기억하기!!!

728x90
반응형
728x90
반응형

3052번 문제

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))

print(after)와 print(after_2)의 결과값에 주목하라

★★★★이문제는 SET함수를 모르면 못푸는 문제다★★★★

SET함수는 중복값을 제외하고 출력하게 해주는 함수이다..

중복값 제외하고 LEN함수를 통해 길이를 구하면 갯수를 알 수있을것이다!!

위 결과값에서의 리스트는 print(after)를 이용해 구한 결과값이다.

print(after_2)를 하게되면 [0,1,2,39,40,41] 이렇게 구해주게 된다.

 

★★★즉 SET함수는 중복값은 없애고 하나로 합쳐주는 기능이라 보면된다!!!★★★

728x90
반응형
728x90
반응형

2577번 문제
count 함수 활용

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)))

2중 for 문 활용

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해라 ==> 쉽다. 

728x90
반응형
728x90
반응형

1110번 문제

 

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문을 통해 재 설정 해준다.

728x90
반응형
728x90
반응형

10951번 문제

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 리스트에 있는 값들 출력

 

 

 

 

728x90
반응형
728x90
반응형

10871번 문제

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= ' ' 기억하기!

728x90
반응형
728x90
반응형

10950번 문제

은근 A,B 범위를 주는데 헷가리는 경우가 많은거 같다

IF문 WHILE문 활용

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문 탈출

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

+ Recent posts