A. Little Artem

문제

예시

[input]
2
3 2
3 3

[output]
BW
WB
BB
BWB
BWW
BWB

답1 – 이곳을 클릭하면 정답이 보입니다
def answer(n, m) :
    BW = {
        1 : 'B',
        -1 : 'W'
    }
    flag = -1
    matrix = []
    for i in range(n) :
        row = []
        for j in range(m) :
            flag *= -1
            row.append(BW[flag])
        matrix.append(row)

    if m%2 == 0 :
        matrix[n-1][1] = 'B'
    elif n%2 == 0 :
        matrix[n-1][0] = 'B'
    
    return "\n".join(["".join(row) for row in matrix])

답2 – 이곳을 클릭하면 정답이 보입니다

설명

B. Kind Anton

문제

예시

[input]
5
3
1 -1 0
1 1 -2
3
0 1 1
0 2 2
2
1 0
1 41
2
-1 0
-1 -41
5
0 1 -1 1 -1
1 1 -1 1 -1

[output]
YES
NO
YES
YES
NO

답1 – 여기를 클릭하면 정답이 보입니다
def answer(a, b) :
    if a[0] != b[0] :
        return "NO"
    
    aHasPlus = False
    aHasMinus = False

    for i in range(len(b)) :
        if a[i] == b[i] :
            continue
        
        if a[i] < b[i] :
            if aHasPlus is False :
                for j in range(i-1, -1, -1) :
                    if a[j] > 0 :
                        aHasPlus = True
                        break
            if aHasPlus is False :
                return "NO"

        if a[i] > b[i] :
            if aHasMinus is False :
                for j in range(i-1, -1, -1) :
                    if a[j] < 0 :
                        aHasMinus = True
                        break
            if aHasMinus is False :
                return "NO"


    return "YES"

testCount = int(input())
for _ in range(testCount) :
    n = input()
    a = list(map(int, input().split()))
    b = list(map(int, input().split()))
    print(answer(a, b))

설명

답2 – 여기를 클릭하면 정답이 보입니다

설명

C. Eugene and an array

문제

https://drive.google.com/open?id=1zLjJFmNwDBVRi6Zoux82Lbz2lj39PDAi

예시

[input]
3
1 2 -3

[output]
5

[input]
3
41 -41 41

[output]
3

답1 – 여기를 클릭하면 정답이 보입니다
def answer(arr) :
  n = len(arr)
  good = 0
  stopIndex = -1
  for currentIndex in range(n) :
    subArrSum = 0
    for i in range(currentIndex, stopIndex, -1) :
      subArrSum += arr[i]
      if subArrSum != 0 :
        good += 1
      else :
        stopIndex = i
        break
  return good

n = int(input())
arr = list(map(int, input().split()))
print(answer(arr))

설명

답2 – 여기를 클릭하면 정답이 보입니다
def answer(arr) :
  n = len(arr)
  good = 0
  d = {0:-1}
  sumStack = 0
  startIndex = -1
  for endIndex in range(n):
    sumStack += arr[endIndex]
    # 왜 있는지 없는지를 체크하는거지 ?
    if sumStack in d:
      # 왜 index랑 max값을 비교하지?
      startIndex = max(startIndex, d[sumStack]+1)
      # 아 그러면 d안 key가 0인놈이 있는지 없는지가 합이 0인지 아닌지를 판별하는건가?
    d[sumStack] = endIndex # 이건 무슨 의미일까?
    good += (endIndex-startIndex)
  return good

n = int(input())
arr = list(map(int, input().split()))
print(answer(arr))

기가 맥히네~