https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AXVJuEvqLAADFASe&categoryId=AXVJuEvqLAADFASe&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=2 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

알파벳 소문자 만으로 이루어진 문자열이 주어진다.

이 문자열에서 같은 두 문자들을 짝짓고 남는 문자가 무엇인지 구하는 프로그램을 작성하라.

같은 문자를 여러 번 짝지어서는 안 된다.

 

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 알파벳 소문자 만으로 이루어진 문자열이 주어진다.

이 문자열의 길이는 1이상 100이하이다.

 

[출력]

각 테스트 케이스 마다 예제와 같은 형식으로 남는 문자를 사전 순서대로 출력한다.

만약 어떤 문자도 남지 않는다면 “Good”을 출력하도록 한다.


풀이

1. 입력받은 문자를 탐색하며 새로운 배열에 넣어준다

2. 배열에 문자를 넣기 전 만약 해당 문자가 있다면 해당 문자는 삭제한다

3. 마지막까지 배열에 남아있는 문자를 사전순으로 정렬 후 출력한다

 

T = int(input())

for tc in range(1, T+1):
    text = list(input())
    alpa = []

    for i in range(len(text)):
        if not text[i] in alpa:
            alpa.append(text[i])
        else:
            alpa.remove(text[i])

    alpa.sort()

    if len(alpa) == 0:
        print('#{} Good'.format(tc))

    else:
        print('#{} '.format(tc),end='')
        for ans in alpa:
            print(ans, end='')
        print()

 

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AXzjvCCq-PwDFASs&categoryId=AXzjvCCq-PwDFASs&categoryType=CODE 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

T = int(input())

for tc in range(1,T+1):
    N = int(input())

    print('#{} {}'.format(tc, N//3))

풀이

나머지를 버림 하거나 몫만 출력할 수 있다면 쉽게 풀 수 있는 문제로

왜 D3인지는 모르겠다

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

swea D2 에서 D3로

백준 브론즈에서 실버로 가면서 점점... 알고리즘 한문제 한문제 시간이 오래 걸리기 시작함...

 


 

T = int(input())

for tc in range(1, T+1):
    text = input()
    t1 = []
    t2 = []
    flag = 1

    for i in text:

        if len(t1) == 0 :
            t1.append(i)
        elif i == t1[0]:
            t1.append(i)
        elif len(t2) == 0:
            t2.append(i)
        elif i == t2[0]:
            t2.append(i)
        else:
            flag = 0
        # print(t1)
        # print(t2)
    if len(t1) != 2 or len(t2) != 2:
        flag = 0
    if flag == 1:
        print('#{} Yes'.format(tc))
    else:
        print('#{} No'.format(tc))

t1, t2라는 이름을 가진 리스트를 2개 생성한 후

입력받은 text의 앞의 문자부터 하나씩 for문을 돌렸다

만약 t1리스트가 비어있다면 t1리스트에 입력이 되고

t1리스트에 어떤 문자가 있다면 그것과 i를 비교해서 같으면 넣고 다르다면 t2리스트로 이동,

t2리스트가 비어있다면 i를 넣고 t2리스트에 문자가 있다면 비교르 한다

그런식으로 for문 위에서 아래로 이동하며 체크 한 뒤 최종적으로 t1과 t2의 길이가 각각 2인경우 Yes출력!

나머지 경우 No를 출력한다!

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5P0-h6Ak4DFAUq&categoryId=AV5P0-h6Ak4DFAUq&categoryType=CODE&problemTitle=%ED%8C%8C%EC%8A%A4%EC%B9%BC&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


T = int(input())

for tc in range(1, T+1):
    num = int(input())

    arr = [[0]*num for _ in range(num)]
    # print(arr)
    ans = ''

    for i in range(num):
        for j in range(i+1):
            if j == 0:
                arr[i][j] = 1
            if j == i:
                arr[i][j] = 1
            else:
                arr[i][j] = arr[i-1][j-1] + arr[i-1][j]
                
    print('#{}'.format(tc))
    for i in range(num):
        for j in range(num):
            if arr[i][j] != 0:
                print(arr[i][j],end=' ')
        print()

행의 양 끝에 미리 1을 다 넣어두고 계산을 했다.

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PzOCKAigDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


T = int(input())

for tc in range(1, T+1):
    N, M = map(int, input().split())

    fly = [list(map(int,input().split())) for _ in range(N)]
    attack = [[0]*M for __ in range(M)]
    max_num = 0

    for i in range(N-M+1):
        for j in range(N-M+1):
            add_num = 0
            for fly_i in range(M):
                for fly_j in range(M):
                    add_num += fly[i+fly_i][j+fly_j]
                    if add_num > max_num:
                        # print(add_num)
                        max_num = add_num

    print('#{} {}'.format(tc, max_num))

2차원 배열을 입력받고 접근 할 수 있어야 풀 수 있는 문제!

모기가 있는 2차원 배열을 만들고

파리채 2차원 배열을 만들어 파리채의 (0, 0)지점부터 파리채 크기만큼의 구역에 모기가 몇마리 있는지 계산 후

max_num에 넣고 출력한다

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5PyTLqAf4DFAUq&categoryId=AV5PyTLqAf4DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


def palindrome(word):
    if word == word[::-1]:
        return 1

    else:
        return 0
        
test_case = int(input())

for i in range(test_case):
    word = input()
    
    print(f'#{i+1}', end = ' ')
    
    print(palindrome(word))

슬라이싱을 이용해 문자를 뒤집고 뒤집어진 문자와 원래 문자가 같으면 1을 출력하도록 구현했다

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PmkDKAOMDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

간단한 압축풀기


T = int(input())

for tc in range(1, T+1):
    N = int(input())
    text = ''
    for n in range(N):
        alpa, num = input().split()
        text += alpa*int(num)
    print('#{}'.format(tc))
    for i in range(1,len(text)+1,10):
        print(text[i-1:i+10-1])

압축을 푸는건 어렵지 않지만 압축을 풀어서 나열해둔 text를 10개씩 나열하는거에서 생각을 조금 해야했다

for 문에서 숫자가 10씩 증가하고 슬라이싱으로 i에서 i+10까지 출력하게 해서 코드를 완성해봤다!

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PnnU6AOsDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

날짜 계산기


# 1948. 날짜 계산기
month = {1:31, 2:28, 3:31, 4:30, 5:31, 6:30, 7:31, 8:31, 9:30, 10:31, 11:30, 12:31}

T = int(input())

for tc in range(1, T+1):
    ans = 0
    fm, fd, sm, sd = map(int, input().split())
    if fm == sm:
        ans = sd - fd
    else:
        for i in range(fm, sm+1):
            if i == fm:
                ans += (month[i] - fd)
            elif i == sm:
                ans += sd
            else:
                ans += month[i]
    print('#{} {}'.format(tc, ans+1))

처음에는 month를 모두 if else로 처리해야하나 막막했는데

딕셔너리를 이용해서 쉽게 풀 수 있었다

월이 같은 경우에는 날짜만 빼주면 되니깐

fm==sm인 경우는 미리 계산해주고,

월이 다른 경우를 else에서 계산해주었다.

 

month(key)로 딕셔너리 values값에 접근하고 그 수를 더해주면 된다!

 

날짜는 세는 당일도 쳐야하기 때문에 마지막에 ans에서 +1

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LrsUaDxcDFAXc 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 백만 장자 프로젝트

T = int(input())

for tc in range(1, T+1):
    N = int(input())
    price = list(map(int,input().split()))

    max_num = 0
    ans_price = 0

    for i in range(N-1,-1,-1):
        if price[i] > max_num:
            max_num = price[i]
        else:
            ans_price += max_num - price[i]

    print('#{} {}'.format(tc, ans_price))

뒤에서부터 탐색하며 max_num에 최대값을 넣어주고 최대값보다 작은 값이 나오면 최대값 - 현재값을 ans_price에 넣어줬다

뒤에서 부터 탐색하면 어렵지 않은 문제!

 

예제 입력값으로 주어지는 값이 메모장 버전과 사이트 버전이 달라서 조금 당황스러웠지만 예외 없이 잘 작동되어서 다행이다.

반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pw_-KAdcDFAUq 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


# 1984. 중간 평균값 구하기

T = int(input())

for tc in range(1, T+1):
    num = list(map(int,input().split()))
    min_num = 10000
    max_num = 0

    for i in num:
        if min_num > i:
            min_num = i
        if max_num < i:
            max_num = i
    num.remove(min_num)
    # print(num)
    num.remove(max_num)
    # print(num)

    add = 0


    for i in num:
        add += i
    ans = add/len(num)

    print('#{} {:.0f}'.format(tc,ans))

num에서 최소값과 최대값을 빼기 위해 remove 메서드를 이용했다

처음에 pop을 이용해서 삭제하려고 했는데

remove(값)

pop(인덱스)

라는걸 잊고 pop(값)을 해줘서 계속 인덱스 오류가 발생했다.

만약 pop을 이용하려면 num리스트를 정렬한 후 가장 첫번째 값과 맨 끝값을 pop으로 삭제할 수 있었을 것 같다.

반응형

+ Recent posts