스위치 켜고 끄기

 

1244번: 스위치 켜고 끄기

첫째 줄에는 스위치 개수가 주어진다. 스위치 개수는 100 이하인 양의 정수이다. 둘째 줄에는 각 스위치의 상태가 주어진다. 켜져 있으면 1, 꺼져있으면 0이라고 표시하고 사이에 빈칸이 하나씩

www.acmicpc.net

 

내 코드

import math
from sys import stdin

# N개의 스위치 상태가 주어짐
# 남자 - 스위치 번호가 자기가 받은 수의 배수면 그 스위치의 상태 바꿈
# ex 남학생 3 -> 3번 6번 스위치의 상태를 바꿈
# 여자 - 자기가 받은 수와 같은 번호가 붙은 스위치를 중심으로 좌우가 대칭이면서 가장 많은 스위치를 포함하는 구간을 찾아
# 구간에 속하는 스위치의 상태를 모두 바꾼다. (구간에 속한 스위치 개수는 항상 홀수)

N = int(stdin.readline())
switch = list(map(int, stdin.readline().split()))

T = int(stdin.readline())

for _ in range(T):
    sex, number = map(int, stdin.readline().split())
    if sex == 1:
        # 본인이 받은 스위치의 번호의 배수 상태 변경
        # print("남자")
        multi = 1
        while True:
            index = multi * number
            if index-1 < len(switch):
                switch[index-1] = 1 if switch[index-1] == 0 else 0
                multi += 1
            else:
                break
        # print(switch)
    else:
        # print("여자")
        # 본인이 받은 수 기준 대칭 가장 많은 스위치 포함 구간 상태 변셩
        middle = number - 1
        left = middle - 1
        right = middle + 1

        while True:
            # out of range check
            if left < 0 or right >= len(switch):
                left += 1
                right -= 1
                break
            # 대칭 체크
            if switch[left] == switch[right]:
                left -= 1
                right += 1
            else:
                left += 1
                right -= 1
                break
        if left != middle and right != middle:
            for i in range(left, right+1):
                switch[i] = 1 if switch[i] == 0 else 0
        else:
            switch[middle] = 1 if switch[middle] == 0 else 0
        # print(switch)

for i in range(math.ceil(len(switch)/20)):
    print(*switch[i*20: (i+1)*20])
728x90

줄세우기

 

10431번: 줄세우기

초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1

www.acmicpc.net

 

내 코드

from sys import stdin

T = int(stdin.readline().strip())

for _ in range(T):
    arr = list(map(int, stdin.readline().strip().split()))
    num = arr[0]
    arr = arr[1:]

    newArr = []
    count = 0

    for a in arr:
        if len(newArr) == 0:
            newArr.append(a)
        else:
            for idx in range(1, len(newArr)+1):
                if newArr[-idx] > a:
                    count += 1

                    if idx == len(newArr):
                        newArr.insert(0, a)
                else:
                    if idx == 1:
                        newArr.append(a)
                        break
                    else:
                        # print(a, idx)
                        newArr = newArr[:-(idx -1)] + [a] + newArr[-(idx - 1):]
                        break
        # print(a, newArr, count)
    print(num, count)
728x90

등수 구하기

 

1205번: 등수 구하기

첫째 줄에 N, 태수의 새로운 점수, 그리고 P가 주어진다. P는 10보다 크거나 같고, 50보다 작거나 같은 정수, N은 0보다 크거나 같고, P보다 작거나 같은 정수이다. 그리고 모든 점수는 2,000,000,000보

www.acmicpc.net

내 코드

from sys import stdin

# N 주어질 리스트 길이
# S 태수 점수
# P 랭킹 순위 수

N, S, P = map(int, stdin.readline().split())
scores = []

# 점수 리스트 세팅
if N > 0:
    scores = list(map(int, stdin.readline().split()))

scores.append(S)
scores.sort(reverse=True)

ranks = []
for idx in range(len(scores)):
    if idx == 0:
        ranks.append(1)
    elif idx != 0 and scores[idx-1] == scores[idx]:
        ranks.append(ranks[-1])
    else:
        ranks.append(len(ranks) + 1)

rank = -1
if len(ranks) <= P:
    index = scores.index(S)
    rank = ranks[index]
else:
    index = scores.index(S)
    rank = ranks[index]

    # 등수가 P와 같을 때 동점자 있는지 확인
    if rank == P and ranks.count(rank) > 1:
        rank = -1

    if rank < P < ranks.count(rank) + len(ranks[:index]):
        rank = -1

    # rank 가 P보다 큰 경우
    if rank > P:
        rank = -1

# print(ranks)
print(rank)
728x90

쿠키의 신체 측정

 

20125번: 쿠키의 신체 측정

쿠키런은 데브시스터즈에서 제작한 모바일 러닝 액션 게임이다. 마녀의 오븐에서 탈출한 쿠키들과 함께 모험을 떠나는 게임으로, 점프와 슬라이드 2가지 버튼만으로 손쉽게 플레이할 수 있는

www.acmicpc.net

 

내 코드

from sys import stdin

N = int(stdin.readline().strip())
head = [-1,-1]
heart = [-1, -1]
result = []
cookies = []

for row in range(N):
    newLine = list(stdin.readline().strip())
    cookies.append(newLine)
    for col in range(len(newLine)):
        # 쿠키 머리 index 저장
        if head[0] == -1 and head[1] == -1 and newLine[col] == '*':
            head[0] = row+1
            head[1] = col+1
            # 머리 기준 바로 아래 심장
            heart[0] = head[0] + 1
            heart[1] = head[1]
            break

# 왼팔 심장 기준 왼쪽
cookie_length = 0
for col in range(0, heart[1]-1):
    if cookies[heart[0]-1][col] == "*":
        cookie_length += 1
result.append(cookie_length)

# 오른팔 심장 기준 오른쪽
cookie_length = 0
for col in range(heart[1], N):
    if cookies[heart[0]-1][col] == "*":
        cookie_length += 1
    else:
        break
result.append(cookie_length)

# 허리 심장 기준 아래
waist_last = [-1, -1]
cookie_length = 0
for row in range(heart[0], N):
    if cookies[row][heart[1]-1] == "*":
        cookie_length += 1
    else:
        waist_last[0] = row-1
        waist_last[1] = heart[1]-1
        break
result.append(cookie_length)


left = 0
right = 0
for row in range(waist_last[0]+1, N):
    # 왼다리 허리 마지막 인덱스 기준 대각선 왼쪽 아래
    # waist_last[0]+1 waist_last[1]-1
    if cookies[row][waist_last[1]-1] == "*":
        left += 1
    # 오른다리 허리 마지막 인덱스 기준 대각선 오른쪽 아래
    # waist_last[0]+1 waist_last[1]+1
    if cookies[row][waist_last[1] + 1] == "*":
        right += 1
result.append(left)
result.append(right)

print(*heart)
print(*result)
728x90

+ Recent posts