본문 바로가기
✨ Club/EDOC 프로그래밍 동아리 | Algorithm

EDOC 2022.08 1주차

by 정람지 2022. 8. 2.

<백준 12873 - 기념품>

 

from sys import stdin

N = int(stdin.readline())
Nlist = list()
#캠프 참가자 리스트
for i in range(N):
    Nlist.append(i+1)
#돌기~
result = 1
for K in range():
    for i in range(K*K): 
        if result == len(Nlist) :#한번 다 돌면 다시 돌기
            result = 1
        else:
            result += 1
    Nlist.remove(result) #걸린 사람 제거
    if len(Nlist) == 1 :
        break

print(Nlist[0])

- for i in range()  

i는 0부터~

 

- range expected at least 1 argument, got 0 에러

K*K 부분이 0 곱하기 0 임 

그리고 제곱 표시는 K**2

무한루프하고 싶으면 while문 쓰자

 

remove(A) 

리스트에서 처음으로 나오는 요소 A 제거

 

참고 블로그 https://latte-is-horse.tistory.com/200

 

[Python] 리스트의 특정 원소 모두 제거하기

Python에서 리스트는 굉장히 중요하고 상징적인 자료형이다. 코딩테스트를 할 때 리스트에서 특정 값들을 모두 제거하고 싶을 때가 있다. 리스트에는 remove라는 메서드가 있어 특정 값을 제거할

latte-is-horse.tistory.com

+문자열에서 제거

1. replace()

replace(A, B)는 문자열의 A를 모두 B로 변경합니다.

replace(A, B, N) 3번째 인자로 삭제할 회수를 전달

 

2.sub()

sub(A, B, 변수명)는 문자열 변수명에서 A를 찾고 해당하는 부분을 B로 변경

 

3. for loop

 

참고 블로그 https://codechacha.com/ko/python-remove-char-in-string/

 

Python - 문자열에서 특정 문자 제거, 3가지 방법

파이썬에서 문자열 안의 특정 문자를 제거하는 방법을 소개합니다. replace(A, B)는 문자열의 A를 모두 B로 변경합니다. 이 함수를 이용하여 특정 문자를 ''으로 변경하여 제거할 수 있습니다. sub(rege

codechacha.com

from sys import stdin

N = int(stdin.readline())
Nlist = list()
#캠프 참가자 리스트
for i in range(N):
    Nlist.append(i+1)
print(Nlist)#
#돌기~
result = 0
K=0
while(1):
    K += 1
    for i in range(K**2): 
        if result == len(Nlist) :#한번 다 돌면 다시 돌기
            result = 1
            print(Nlist)#
            print(result)#
        else:
            result += 1
            print(Nlist)#
            print(result)#
    Nlist.remove(Nlist[result-1]) #걸린 사람 제거
    result-=1
    if len(Nlist) == 1 :
        break
print(Nlist)#
print(Nlist[0])

어떻게 돌아가는지 잘 모르겠을 때는 중간중간에 print() - js는 console.log()

result -= 1 !!! 하나 빠지면 자릿수 앞으로 하나씩 당겨진다는 점

 

근데 안 되네

제곱이 아니라 세제곱이구나

from sys import stdin

N = int(stdin.readline())
Nlist = list()
#캠프 참가자 리스트
for i in range(N):
    Nlist.append(i+1)
#돌기~
result = 0
K=0
while(1):
    K += 1
    for i in range(K**3): 
        if result == len(Nlist) :#한번 다 돌면 다시 돌기
            result = 1
        else:
            result += 1
    Nlist.remove(Nlist[result-1]) #걸린 사람 제거
    result-=1
    if len(Nlist) == 1 :
        break

print(Nlist[0])

돼땅

에러 나면 짜증나지만 됐을 때 기분이 굉장히 좋다 ㅎㅎㅎ

 

+ 백준 출력 초과

디버깅을 위한 코드 print()를 삭제하지 않고 제출하면 뜬다.

 

근데 백준에서는 시간초과난다~ 큐를 배워보자

큐(Queue)

참고 블로그 https://velog.io/@lilys2/파이썬알고리즘-Queue의-개념과-백준-12873

 

[파이썬&알고리즘] Queue의 개념과 백준 12873

Queue에 관한 간단한 설명과 파이썬에서 사용법 및 백준 12873번의 풀이를 작성한 포스팅입니다.

velog.io

https://security04.tistory.com/232

 

[Algorithmic] 스택, 큐, 덱

  스택, 큐, 덱 스택 입력과 출력을 한방향에서 제한한 자료 구조이다. LIFO(Last in First Out)으로 가장 나중에 들어온 데이터가 제일 먼저 빠져 나가는 구조이다. 스택에서는 두가지 과정이 있는데,

security04.tistory.com

아씽

모르겠다 시간초과나는데

성장해서 다시 돌아온다


그리고 큐를 쓰지 않고 간단하게(시간초과나지 않게) 코딩한 언니들의 코드

N = int(input())
p = list(range(1,N+1))
r = 0
for level in range(1, N):
    r = (level**3 + r - 1) % len(p)
    p.pop(r)
print(p[0])

주연언니거

 

p = list(range(1,N+1))

리스트 안에 숫자 넣는 거 간단하게!

 

p = (p + i**3 - 1) % len(party)

획기적.. 맨 처음에 //랑 %어디에 쓰나 했는데 잘 사용하면 굉장히 유용한 듯


 

- 그리디 알고리즘 -

 

그리디(Greedy) 알고리즘은 탐욕법이라고도 하며, 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다

일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구합니다.

그리디 알고리즘을 이용하면 매 순간 가장 좋아 보이는 것만 선택하며, 현재의 선택이 나중에 미칠 영향에 대해서는 고려하지 않습니다.

 

참고 블로그 링크  https://velog.io/@cha-suyeon/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%AC%EB%94%94Greedy-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EC%98%88%EC%A0%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[알고리즘] 그리디(Greedy) 알고리즘과 예제 (파이썬)

📌 강의 바로가기개념과 코드, 이미지는 해당 책과 강의를 참고하였습니다.그리디(Greedy) 알고리즘은 탐욕법이라고도 하며, 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다.일반

velog.io


<백준 1449번 - 수리공 항승>

from sys import stdin

N, L = map(int, stdin.readline().split())
W = list(map(int, stdin.readline().split()))
W.sort()

tapeNumber = 0
tapeHere = 0 #여기에 제일 오른쪽 테이프가 붙어잇음
for i in W:
    if tapeHere < i: #원래는 tapeHere-0.5 < i인데 W값이 모두 정수이므로 상관없음
        tapeHere = i+L-0.5 #왼쪽 0.5 남겨 붙여야 함
        tapeNumber += 1
print(tapeNumber)

끝!

 

'✨ Club > EDOC 프로그래밍 동아리 | Algorithm' 카테고리의 다른 글

EDOC 1-2 1회차  (0) 2022.09.14
Edoc 엠티 팀대항 코딩  (0) 2022.08.24
EDOC 2022.08 3주차  (0) 2022.08.16
EDOC 2022.08 2주차  (0) 2022.08.09
EDOC 2022.07 4주차  (0) 2022.07.27