본문 바로가기
[파이썬][백준] 2667 단지번호 붙이기 [핵심] 배추문제랑 거의 동일한 문제 차이점은 수를 하나더 카운팅 해주는것뿐 While문을 활용한 del 기억하자!!! num = int(input()) lit = [] dx = [0,0,1,-1] dy = [1,-1,0,0] ans =[] cot =[] def recu(x,y): cnt = 0 stack = [[x,y]] while stack: x = stack[0][0] y = stack[0][1] del stack[0] cnt+=1 lit[x][y] = '0' for i in range(4): X = int(x)+dx[i] Y = int(y)+dy[i] if 0 2020. 3. 28.
[파이썬][백준] 9466 텀프로젝트 - 시간초과 시간초과가 발생했다. 그 이유는 이중포문떄문일까...? 아직 잘 모르겠다. import sys numtest =int(sys.stdin.readline()) count =0 for i in range(numtest): numstu = int(sys.stdin.readline()) check = [False]*numstu stu_sel =list(map(int,sys.stdin.readline().split())) for j in range(numstu): # 매칭시 True로 만들기 stack=[j] if check[stu_sel[j]-1] == False: while True: if check[stu_sel[j]-1] == False: stack.append(stu_sel[j]-1) j = stu_se.. 2020. 3. 27.
[파이썬][백준] 에라토스테네스의 체 골드바흐의 추측 문제를 풀려다보니, 에라토스테네스의 체의 소수를 구하는 방법을 공부하기 위해 풀었다. 생각보다 너무 간단했다. num,k = map(int,input().split()) lit = [i for i in range(2,num+1)] count = 0 while True: q = lit[0] for i in lit: if i % q ==0: lit.remove(i) count += 1 result = i #마지막 값 저장 if count == k: break if count ==k: break print(result) 그리고 나서, 위의 기법을 활용하여 약수를 출력하도록 변행시켰다. num = int(input()) lit = [i for i in range(2,num+1)] count = .. 2020. 3. 27.
[백준][파이썬] 1012 유기농 배추 BFS [핵심] BFS 분류되는 이유는 결국 1과 붙어있는것들을 모두 제거할때 count가 증가하기떄문이다. 연습해야할 코딩 방식 1. dx dy를 이용한 좌표처리 그리고 경계값 -1일때 인덱스 에러 안나게 범위 설정해주는것 2. 재귀함수를 이용한것이 아니라 While문으로 활용 3. [0]*n으로 배열을 만들면 이상하게 다르게 값이 출력된다.. (이유는 아직 모름) 주소값을 공유하는 개념때문인가? 여러번 코딩해서 구조 익힐것 numcase = int(input()) dx = [-1,0,0,1] dy = [0,1,-1,0] def recu(x,y): check = [[x,y]] while check: checka = check[0][0] #x,y값 저장 checkb = check[0][1] del check[0.. 2020. 3. 26.
[파이썬][백준] 1012 GCD [핵심] 이전의 문제와는 달리, 뉴클리드 호제법을 사용하였다. 기존의 FOR문으로 모든경우의 수를 카운팅 하는것보다 훨씬 메모리와 시간을 덜 잡을것같다 case = int(input()) def gcd(x, y): while y != 0: r = x % y x = y y = r return x for i in range(case): total = 0 num = list(map(int,input().split())) for i in range(1,len(num)-1): for j in range(i+1,len(num)): total += gcd(num[i],num[j]) print(total) 2020. 3. 26.
[파이썬][백준] 2609번 최대공약수와 최대공배수 A,B = map(int,input().split()) if A>B: num = B num2 =A else: num = A num2 = B for i in range(1,num+1): if num2 % i ==0 and num % i==0: total = i print(total) print(int(A*B/total)) 2020. 3. 26.
[백준][파이썬] 13015 별찍기(23) [핵심] 상당한 노가다로 푼 느낌이다. 재귀함수로 풀었어도 되긴 했겠지만, 많은 문제를 재귀함수로 풀었어서 이중포문을 활용해서도 풀어보고 싶었다. 앞으로 더 어려운문제는 재귀함수로 풀어야겠다. num = int(input()) print("*"*num,end="");print(" "*(2*(num-1)-1),end="");print("*"*num) for i in range(1,num-1): print(" "*i,end="");print("*",end="");print(" "*(num-2),end="");print("*",end="") print(" "*(2*(num-2)+1-2*i),end="") print("*", end="");print(" " * (num - 2), end="");print("*".. 2020. 3. 23.
[백준][파이썬] 10991 별찍기(16) [핵심] 이전까지는 재귀함수로 풀었지만, 이번엔 이중포문으로 풀어봤다. 역시 이중포문에서 첫번쨰 i를 두번쨰 포문의 range 안에 넣어주는것을 잘활용해야 한다. num = int(input()) print(" "*(num-1),end="");print("*") for i in range(2,num+1): print(" "*(num-i),end="");print("*",end=" ") for j in range(i-2): print("*",end=" ") print("*") 2020. 3. 23.
[파이썬][백준] 2448 번 별찍기 (11) [핵심] 별찍기(10)이랑 거의 동일한 문제지만 x,y좌표값이 일정하지 않고 출력형식에 맞춰주기만 하면 동일한 유형이 된다. num = int(input()) tnum = 2*num -1 lit =[[" " for i in range(tnum)] for j in range(num)] def recu(x,y,cnt,num): if cnt == 5: for i in range(x,x+3): for j in range(y,y+5): if i == x and j == y+2: lit[i][j] = "*" if i == x+1 and j == y+1: lit[i][j] = "*" if i == x+1 and j == y+3: lit[i][j] = "*" if i == x+2: lit[i][j]="*" return.. 2020. 3. 22.