2W.3D-구현문제, 백준 18406,4673,3190

Dazz_heyDay ·2021년 7월 7일
1

Python) Algorithm_study

목록 보기
8/39

✏️이코테(pg.322) [문자열 재정렬]🔥

<문제>

알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어진다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력한다. 예를 들어 K1KA5CB7 이라는 값이 들어오면 ABCKK13 을 출력한다.

입력조건: 첫째 줄에 하나의 문자열 S가 주어진다. (1 <= S의 길이 <= 10,000)
출력조건: 첫째 줄에 문제에서 요구하는 정답을 출력한다.

ss=input()
array=[]
hap=0
for i in ss:
    if i.isalpha():
        array+=i
    else:
        hap+=int(i)

array.sort()
alpha=''.join(array)
print(alpha+str(hap))

feedback

isalpha()
''.join()


✏️문제18406[럭키 스트레이트]🌈

<문제>

어떤 게임의 아웃복서 캐릭터에게는 럭키 스트레이트라는 기술이 존재한다. 이 기술은 매우 강력한 대신에 항상 사용할 수는 없으며, 현재 게임 내에서 점수가 특정 조건을 만족할 때만 사용할 수 있다.

특정 조건이란 현재 캐릭터의 점수를 N이라고 할 때 점수 N을 자릿수를 기준으로 반으로 나누어 왼쪽 부분의 각 자릿수의 합과 오른쪽 부분의 각 자릿수의 합을 더한 값이 동일한 상황을 의미한다. 예를 들어 현재 점수가 123,402라면 왼쪽 부분의 각 자릿수의 합은 1+2+3, 오른쪽 부분의 각 자릿수의 합은 4+0+2이므로 두 합이 6으로 동일하여 럭키 스트레이트를 사용할 수 있다.

현재 점수 N이 주어졌을 때, 럭키 스트레이트를 사용할 수 있는 상태인지 아닌지를 알려주는 프로그램을 작성하시오. 럭키 스트레이트를 사용할 수 있다면 "LUCKY"를, 사용할 수 없다면 "READY"라는 단어를 출력한다. 또한 점수 N의 자릿수는 항상 짝수 형태로만 주어진다. 예를 들어 자릿수가 5인 12,345와 같은 수는 입력으로 들어오지 않는다.

입력조건:첫째 줄에 점수 N이 정수로 주어진다. (10 ≤ N ≤ 99,999,999) 단, 점수 N의 자릿수는 항상 짝수 형태로만 주어진다.
출력조건:첫째 줄에 럭키 스트레이트를 사용할 수 있다면 "LUCKY"를, 사용할 수 없다면 "READY"라는 단어를 출력한다.

code

n=input()
d=int(len(n)/2)
hap1,hap2=0,0
for i in range(0,d):
    hap1=hap1+int(n[i])
for j in range(d,len(n)):
    hap2=hap2+int(n[j])
if hap1==hap2:
    print("LUCKY")
else:
    print("READY")

✏️문제4673 [셀프 넘버]🔥🔥

<문제>

셀프 넘버는 1949년 인도 수학자 D.R. Kaprekar가 이름 붙였다. 양의 정수 n에 대해서 d(n)을 n과 n의 각 자리수를 더하는 함수라고 정의하자. 예를 들어, d(75) = 75+7+5 = 87이다.

양의 정수 n이 주어졌을 때, 이 수를 시작해서 n, d(n), d(d(n)), d(d(d(n))), ...과 같은 무한 수열을 만들 수 있다.

예를 들어, 33으로 시작한다면 다음 수는 33 + 3 + 3 = 39이고, 그 다음 수는 39 + 3 + 9 = 51, 다음 수는 51 + 5 + 1 = 57이다. 이런식으로 다음과 같은 수열을 만들 수 있다.

33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...

n을 d(n)의 생성자라고 한다. 위의 수열에서 33은 39의 생성자이고, 39는 51의 생성자, 51은 57의 생성자이다. 생성자가 한 개보다 많은 경우도 있다. 예를 들어, 101은 생성자가 2개(91과 100) 있다.

생성자가 없는 숫자 를 셀프 넘버라고 한다. 100보다 작은 셀프 넘버는 총 13개가 있다. 1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

10000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 출력하는 프로그램을 작성하시오.

입력조건:입력은 없다.
출력조건:10,000보다 작거나 같은 셀프 넘버를 한 줄에 하나씩 증가하는 순서로 출력한다.

code

def fres(i):
	newI=str(i)
    hap=0
    for m in range(0,len(newI)):
        hap=hap+int(newI[m])
    return hap    
Num=[]
for k in range(1,10001):
    Num.append(k)
for j in range(1,10001):
    q=j
    while q<=10000:
        q = q + fres(q)
        if q in Num:
            Num.remove(q)
    print(Num[j-1])

def d(n):
  n=n+sum(map(int,str(n)))
  
  return n

#생성자가 있는지 확인할 리스트 초기화하기
a=[0]*10001

#생성자 찾기
for i in range(1,10001):
  a[i]=d(i)


for i in range(1,10001):
  #셀프넘버라면 출력하기
  if i not in a:
    print(i)

참고링크:https://velog.io/@sch804/파이썬-백준-4673번-셀프넘버

feedback

(와..이렇게 짧다고?🥲)
내 코드의 문제는 제한시간 1초만에 답이 안 나온다는 것이다.....쩝..
복습할때 만나요 부라보콘


✏️문제 3190[뱀]

<문제>

'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.

게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다.

뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따른다.

먼저 뱀은 몸길이를 늘려 머리를 다음칸에 위치시킨다.
만약 이동한 칸에 사과가 있다면, 그 칸에 있던 사과가 없어지고 꼬리는 움직이지 않는다.
만약 이동한 칸에 사과가 없다면, 몸길이를 줄여서 꼬리가 위치한 칸을 비워준다. 즉, 몸길이는 변하지 않는다.
사과의 위치와 뱀의 이동경로가 주어질 때 이 게임이 몇 초에 끝나는지 계산하라.

입력조건: 첫째 줄에 보드의 크기 N이 주어진다. (2 ≤ N ≤ 100) 다음 줄에 사과의 개수 K가 주어진다. (0 ≤ K ≤ 100)
다음 K개의 줄에는 사과의 위치가 주어지는데, 첫 번째 정수는 행, 두 번째 정수는 열 위치를 의미한다. 사과의 위치는 모두 다르며, 맨 위 맨 좌측 (1행 1열) 에는 사과가 없다.
다음 줄에는 뱀의 방향 변환 횟수 L 이 주어진다. (1 ≤ L ≤ 100)
다음 L개의 줄에는 뱀의 방향 변환 정보가 주어지는데, 정수 X와 문자 C로 이루어져 있으며. 게임 시작 시간으로부터 X초가 끝난 뒤에 왼쪽(C가 'L') 또는 오른쪽(C가 'D')로 90도 방향을 회전시킨다는 뜻이다. X는 10,000 이하의 양의 정수이며, 방향 전환 정보는 X가 증가하는 순으로 주어진다.
출력조건:첫째 줄에 게임이 몇 초에 끝나는지 출력한다.

눈이 빠질 것 같아요😵....오늘은 여기까지.....🥲

profile
Why.Not.Now

2개의 댓글

comment-user-thumbnail
2021년 7월 7일

복습할때 만나요 부라보콘ㅋㅋㅋㅋㅋㅋㅋ 너무 웃었어요ㅋㅋㅋㅋ 저도 마지막 문제... 눈이 빠질 것 같더라고요. 복습시간에 하려고 남겨놨습니다... 오늘도 고생하셨습니다!!! 내일도 화이팅임다!! (김덕우 드림)

답글 달기
comment-user-thumbnail
2021년 7월 7일

ㅋㅋㅋ 저도,,!! 4번 문제 나중에 하려고 애껴뒀어요,, 😂😂 벌써 수요일이네요,, 남은 목, 금요일도 같이 화이팅해요~~

답글 달기