Но тогда придется разибвать на строки.
Чтобы угодить заданию, можно место отступов можно тупо оборачивать блоки в контейнеры с шириной, немного большей, таким образом получим отступы.
<style>
.container{
width: 600px;
outline: 1px solid red;
}
.grid{
display: table;
width: 100%;
border-spacing: 30px;
margin: 0 -30px;
table-layout: fixed;
}
.grid .row{
display: table-row;
}
.grid .item{
width: 180px;
height: 200px;
display: table-cell;
vertical-align: top;
background: blue;
}
</style>
<div class="container">
<div class="grid">
<div class="row">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
<div class="row">
<div class="item"></div>
<div class="item"></div>
</div>
</div>
</div>