1. A method of operating a non-volatile memory device, comprising: determining a number of memory cells selected for programming in an array of memory cells in a first program operation; determining a number of memory cells that failed to program in the first program operation; and determining a programming voltage change in response to the number of memory cells that failed to program in the first program operation.